惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
U
Unit 42
H
Help Net Security
博客园_首页
雷峰网
雷峰网
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园 - 【当耐特】
Recent Announcements
Recent Announcements
Recorded Future
Recorded Future
aimingoo的专栏
aimingoo的专栏
爱范儿
爱范儿
C
CXSECURITY Database RSS Feed - CXSecurity.com
The Cloudflare Blog
S
Security @ Cisco Blogs
M
MIT News - Artificial intelligence
Cyberwarzone
Cyberwarzone
Cisco Talos Blog
Cisco Talos Blog
Spread Privacy
Spread Privacy
The GitHub Blog
The GitHub Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
K
Kaspersky official blog
MyScale Blog
MyScale Blog
阮一峰的网络日志
阮一峰的网络日志
C
CERT Recently Published Vulnerability Notes
V
Vulnerabilities – Threatpost
WordPress大学
WordPress大学
C
Cisco Blogs
G
Google Developers Blog
N
News and Events Feed by Topic
P
Palo Alto Networks Blog
Apple Machine Learning Research
Apple Machine Learning Research
Schneier on Security
Schneier on Security
博客园 - 聂微东
Security Latest
Security Latest
Security Archives - TechRepublic
Security Archives - TechRepublic
O
OpenAI News
云风的 BLOG
云风的 BLOG
IT之家
IT之家
PCI Perspectives
PCI Perspectives
Microsoft Security Blog
Microsoft Security Blog
NISL@THU
NISL@THU
小众软件
小众软件
Scott Helme
Scott Helme
大猫的无限游戏
大猫的无限游戏
L
LINUX DO - 最新话题
Microsoft Azure Blog
Microsoft Azure Blog
Simon Willison's Weblog
Simon Willison's Weblog
N
News and Events Feed by Topic
F
Fortinet All Blogs
The Last Watchdog
The Last Watchdog

mephisto.cc

修复rime-ice无法弹出候选框的问题 开机滚动字体显示优化 个人网站安全防护 树莓派上部署Vaultwarden 使用goaccess实时分析Caddy日志 个人网站监控 Hugo全站AVIF记 Arch linux dae 透明代理 Airflow接管galler-dl下载任务 如何使用gallery-dl批量下载图像 Arch核显下如何愉快玩Dota2和CS2 Arch/labwc 环境网络相关设置 Rime添加dota2词库 Arch 重装记录 Supertuxkart iOS版终于发布了 打造自己的流媒体音乐服务 剪切板管理工具clipcat推荐 MangoHud性能监控 微信小程序开发记 Rofi试用 解决Arch下VSCode无法输入中文的问题 独立窗口管理器下无法录屏问题处理 上海市二手房成交数据监控 OpenLDAP监控 Arch linux如何顺畅连接蓝牙设备 使用Git和Ansible管理配置文件 Arch Linux SSL VPN 客户端配置 简单获取celery任务实时结果 Arch linux下iNode客户端的安装和使用方法 券商费率调整记 迷你主机组装记 Labwc更换定制皮肤 树莓派跑分流代理 实用自动代理配置示例 九年老鼠标复活记 Openvpn示例 Mac下如何旋转webp图片 如何隐藏Vscode中Markdown PDF插件的头部内容 解决Linux下网络配置无法变更保存的问题 labwc环境启用wlogout Ubuntu下新官方微信尝鲜 简单检测用户是否开启广告屏蔽 Atuin ZFS下卡顿问题解决 Wine安装64位微信 Fish 和 Atuin使用记 Fastapi简单实现临时下载链接 Fastapi微信公众号开发简要 Hugo根据语种展示不同内容 如何修复Waybar微信图标错误 信封加密简要 Linux环境下维护公众号记录 快速隐藏和呼出终端 Wayland环境自动切换壁纸 SuperTuxKart 试玩 简单抓取雪球股票快讯 为什么你的kill命令不能列出信号表 Wine安装微信保姆教程 Hysteria科学上网简要 Ubuntu 23.10 钉钉无法启动解决方法 网站导航栏防止插入Adsense自动广告 Linux环境按键检测 Hugo文末添加最后修改时间 Wayland环境ksnip无法复制问题解决 我眼中的股票市场 Caddy简单图片防盗链 greetd和regreet使用教程 Wayland环境下截图加后期修改 Wayland 环境下gif录屏 Firefox的一些有趣功能 Ubuntu 切换系统语言 Firefox 标题栏高度调整 网站添加回到顶部功能 Hugo自定义字体 Labwc 便捷配置 Wofi使用教程 窗口管理器labwc使用记 文件共享软件Dufs推荐 Hugo静态站点接入Adsense广告 Fcitx5配置详解 Ubuntu安装chrome的方法总结 一种Xterm.js的全屏方案 Google网址收录api Python示例 手机听离线音乐 Snipe it资产导入 应用启动器yofi使用配置 Snipe it资产管理系统安装使用 Ubuntu开机启动加速 Vue3 vite TypeScript跨域等相关设置 Ubuntu手动升级Libreoffice Ubuntu设置alacritty为默认终端 简体文章批量转换为繁体 使用Inkscape调整svg图片大小 实用命令 使用mitmproxy给手机app抓包 Python中rstrip方法细解 Github同主机多仓库部署deploy key问题处理 Linux安装最新版本Python KeePassXC使用教程 Ubuntu 22.10连接蓝牙耳机报错br-connection-profile-unavailable解决方法 Caddy日志配置轮转和格式化
Linux下尝试使用Godot开发小游戏
2026-01-14 · via mephisto.cc

之前浏览资讯的时候,看到 Blender Studio 发布了一款名为 Dogwalk 的免费游戏,在 Steam 上试玩了下,牵着一条狗在地图上跑来跑去的,没搞明白也没有耐心玩完。

Blender 和 Godot 的结合倒是给人留下了印象,于是想到为什么不用 Godot 做个小游戏试试看呢?顺便学习下游戏开发相关的各种概念。

本文记录在 Arch Linux 下使用 Godot,按照官方示例开发 2D 游戏,并尝试发布到微信小游戏(结果失败,后文会讲原因)。

1. 安装游戏引擎 Godot

Godot 是一款多功能、跨平台的 2D 与 3D 开源游戏引擎,GitHub 标星都 105k 了,国内也有一众适合小游戏开发的引擎 Cocos、LayaAir、Egret 等,基本都不提供 Linux 版本,或者极少维护的状态,国内很多软件都这样,早已习惯。

优势是其中有些能直接导出成微信小游戏发布。我喜欢 Linux 和 Python,选择 Godot,玩票性质的。

若要安装其它版本,官网也能直接下载,解压后是个可执行程序,直接运行就好。

2. 开发 2D 游戏

官方文档有个 2D 游戏的教程,也有 3D 教程,没做过游戏开发,本人新手上路老实选 2D,跟着教程跑通了。

建议:

  • 最好双屏,一个屏幕看文档,一个引擎开发,不用拖来拖去,来回切换,单屏真的累。
  • 同时打开中文和英文文档,游戏开发有些特定术语,对比看更容易理解,少走弯路。
  • 保持耐心,是文档总没那么理想,对新手来说,其中有些脚本更改逻辑,没有标注修改的是哪个脚本文件,要结合前后文自己判断到底在哪个文件做修改(主要是指 GDScript),也可以直接下载 dodge_the_creeps_2d_assets.zip,照着源码包看。
  • 使用 Git 版本管理,这没什么好解释的

新手至少要操作几个小时的,跟着教程走完后,如下图所示:

dodge_the_creeps_2d

标号 1、2 是游戏界面,分别为玩家和敌人,玩家通过键盘方向键控制移动,敌人会从屏幕 4 个方向随机出现,碰到即游戏结束,播放一段死亡音乐。

标号 3 是场景,在 Godot 中,游戏分解成可重复使用的场景。场景可以是一个角色、一件武器、用户界面中的一个菜单、一座房子、整个关卡、或者任何你能想到的东西,各个场景组成场景树,由主场景切入,场景会绑定 GDScript。像导演拍电影一样,各种花絮结合起来就是一个电影。

标号 4 是类似于电脑的文件系统,或者叫资源管理树,不多解释。

标号 5 是给场景的各种通用组建进行设定,比如颜色、字体、圆的半径、图片、和音乐绑定,信号连接等。

其它没标号的地方,点点看就明白是什么意思了。游戏引擎要模拟各种现实物件和逻辑,细究还是挺复杂的。

3. 导出游戏

Godot 支持导出到多个平台,如下图所示:

godot_export

导出要下载额外的模板,会帮你选择最快的源下载,懒得截图了。

在 Linux 下,我测试了导出为 Linux 下的二进制可执行程序和 web 导出,二进制可正常运行;web 导出结果,使用 sudo caddy file-server 就能在浏览器上面打开游戏,也就是说,你可以把游戏放到你网站上去,有浏览器就能玩,这不就是就是页游么😅?

相比导出到微信小程序各种繁琐和无奈,不得不让人感叹还是标准 web 障碍少。

4. 尝试发布到微信小游戏

Godot 是不像地头蛇 Cocos,是不能直接导出到微信小游戏的,抖音小游戏倒是支持 Godot,但抖音要软著,个人开发者还限定使用场景,路都封死了啊!

所以下面只说,如何导出到微信小游戏:

这个开源项目:https://github.com/yuchenyang1994/godot-love-wechat 支持 Godot 导出到微信小程序。

看了下源码,默认是为 Windows 用户服务的😮‍💨,不过我尝试了下只需稍微改几行代码就能跑起来。 请看diff

 1(godot-love-wechat)   godot-love-wechat git:(main)  git diff 24058f6 2035a376
 2diff --git a/app/exporter.py b/app/exporter.py
 3index db3d503..4056bff 100644
 4--- a/app/exporter.py
 5+++ b/app/exporter.py
 6@@ -131,7 +131,8 @@ class Exporter:
 7         export_path = export_settings["export_path"]
 8         settings = self.storage.get("settings.json")
 9         if settings:
10-            wechat_execute = os.path.join(settings["wechat_execute"], "cli.bat")
11+            #wechat_execute = os.path.join(settings["wechat_execute"], "cli.bat")
12+            wechat_execute = settings["wechat_execute"]
13             result = subprocess.run([wechat_execute, "open", "--project", export_path])
14             print(result)
15
16diff --git a/app/stroge.py b/app/stroge.py
17index e90cf12..b1472ea 100644
18--- a/app/stroge.py
19+++ b/app/stroge.py
20@@ -1,9 +1,11 @@
21 import os
22 import json
23+from platformdirs import user_data_dir
24
25 class Storge:
26     def __init__(self) -> None:
27-        self.path = os.path.join(os.environ['LOCALAPPDATA'], 'godot-love-wechat')
28+        self.path = user_data_dir("godot-love-wechat")
29+        os.makedirs(self.path, exist_ok=True)
30
31     def save(self, file, data):
32         print(self.path)

就是改动默认存数据的目录和启动微信开发者工具的逻辑,作者都是写死只支持 Windows,还有就是安装一些 pywebview 的一些 gui 包。实在搞不懂就问 AI 或者通过公众号联系我。

 1(godot-love-wechat)   godot-love-wechat git:(main)  cat pyproject.toml
 2[project]
 3name = "godot-love-wechat"
 4version = "0.1.0"
 5description = "Add your description here"
 6readme = "README.md"
 7requires-python = ">=3.12"
 8dependencies = [
 9    "boto3>=1.37.8",
10    "nicegui>=2.9.0",
11    "nuitka>=2.5.9",
12    "pillow>=11.0.0",
13    "pyinstaller>=6.11.1",
14    "pywebview>=5.3.2",
15]

配置数据真实存放目录:

 1➜  ~ cd .local/share/godot-love-wechat/
 2➜  godot-love-wechat ls
 3projects.json  settings.json
 4➜  godot-love-wechat cat projects.json
 5[
 6  {
 7    "id": "e7d0f48436b2484a82d8c2ae514a2d35",
 8    "name": "dodge-the-creeps",
 9    "path": "/home/mephisto/github/dodge-the-creeps",
10    "version": "",
11    "description": "",
12    "icon": "/home/mephisto/github/dodge-the-creeps/icon.svg"
13  }
14]15➜  godot-love-wechat cat settings.json
16{
17  "godot_execute": "/bin/godot-4.4.1",
18  "wechat_execute": "/usr/bin/wechat-devtools",
19  "cdn_endpoint": "",
20  "cdn_access_key_id": "",
21  "cdn_secret_access_key": ""
22}23➜  godot-love-wechat pwd
24/home/mephisto/.local/share/godot-love-wechat

你是不是和我一样,心里美滋滋以为跑起来就万事大吉?错,更多痛苦在后面。

按照作者的仓库文档指引和 B 站视频,我是连续几天空闲时间折腾,包括降级 Godot 版本(4.5.1->4.4.1)、Skyline、微信开发者工具调试基础库切换、导出模板 4.5.1 适配(期间还要源码编译 Godot,仓库大下载慢等,怎么适配?文档不清晰),最后效果只能达到如下图所示:

godot-minigame-shit

点上面标号 1 的地方(游戏开始按钮),游戏是正常运行的,能听到背景音乐和碰撞后游戏结束的声音,但画面是黑屏的,iPhone 手机预览也无法正常运行。问 AI 说是 webgl 渲染问题,新手只能表示无奈,挣扎到此结束了。

建议切换 Windows 系统导出到微信小游戏,我已经不用 Windows 好多年了。

此外,还有人弄了个导出助手,走商业路线的,表示理解。

我只希望后来者,看到我这个记录,能有点帮助少踩坑,至少我让这个开源导出软件在 Linux 下运行起来,还没有人写过 Linux 平台下的导出相关文章。

希望有一天冒出个高手,扫平障碍,抑或等腾讯像字节那样官方支持 Godot 导出到小游戏,目前看起来比较难。