最普通的 C++ 项目:在 GTA 3 中编码 B2 隐形轰炸机
摘要
一位开发者解释了为 Mac 构建开源 RE3 项目、修复鼠标输入 bug,并计划在 GTA 3 中添加 B2 隐形轰炸机,重点讨论软件工程方法论。
<p><a href="https://lobste.rs/s/uzbhh8/most_normal_c_project_coding_b2_stealth">评论</a></p>
查看缓存全文
缓存时间: 2026/09/19 22:08
# 最普通的C++项目:在GTA 3中编写B2隐形轰炸机
**简而言之:** 一位开发者为Mac平台构建开源RE3项目,修复了鼠标输入等平台特定问题,创建了高效开发环境,并计划在游戏中加入B2隐形轰炸机。
## 引言:软件工程新系列
本视频是专注于将真实软件工程方法应用于现有项目大型问题的新系列首篇。超越简单的代码审查,目标是实现新的系统和功能,首先通过开源RE3项目为《侠盗猎车手III》添加B2隐形轰炸机。核心理念聚焦于系统架构与问题解决方法论,而非单纯工具或主题。
第一步涉及构建RE3引擎、运行游戏、建立开发环境,随后开始飞机系统的开发工作。
## 构建引擎与运行游戏
流程始于获取原始游戏资源。讲述者提到在eBay购买了实体光盘。RE3项目在macOS上使用多个依赖构建:
* **Premake** 用于生成构建文件
* **GLFW** 处理窗口与输入
* **OpenAL** 处理音频,配合 **libsndfile** 和 **MPG123** 进行音频解码
* **librw** 渲染库作为git子模块包含
编译后,将RE3二进制文件放入游戏资源文件夹。初步测试确认引擎能够成功加载原始资源且不崩溃——这是第一个"关键"时刻。
## 修复macOS鼠标输入错误
遇到的首个重大错误是鼠标输入失效。键盘可用,但鼠标点击与视角旋转无效。使用"源代码导航"工具定位问题,调查集中在调用GLFW的`glfwGetCursorPos`和`glfwGetMouseButton`的`cpad_update_mouse`函数。
问题追溯至条件判断语句:
``c
if foregroundApp && PSglobal.cursorInWindow
```
调试发现虽然`foregroundApp`为真,但`cursorInWindow`为假,导致所有鼠标数据无法传递至菜单和视角控制。
根本原因是平台假设问题:`cursorInWindow`标志由`cursorEnterCallback`回调设置,而该回调仅在光标跨越窗口边界时触发。在macOS全屏模式下,光标从一开始就处于捕获状态,该事件永不发生,导致标志永久保持假值。
**解决方案:**
在检查中添加新条件而非简单覆盖:
``c
bool cursorCaptured = glfwGetInputMode(window, GLFW_CURSOR) == GLFW_CURSOR_DISABLED;
bool allCursorHovered = glfwGetWindowAttrib(window, GLFW_HOVERED) == GLFW_TRUE;
```
更新后的条件为:
``c
if (foregroundApp && (cursorInWindow || cursorCaptured || allCursorHovered))
```
这样只要应用程序处于前台*且*光标处于以下任一状态即可处理鼠标输入:位于窗口内、被窗口捕获、悬停在窗口上方。原有的`cursorInWindow`检查得以保留。
## 创建高效开发环境
游戏运行后,重点转向优化开发周期。最初"修改-编译-运行-导航-测试"的循环过于缓慢。计划创建专用`re3_dev`构建配置,包含多项加速迭代的功能:
* **窗口模式:** 在800x600窗口运行而非全屏
* **跳过过场:** 跳过剧情动画、故事片段和菜单
* **可控测试场地:** 将玩家生成在合适地点(如机场),空间充足、无NPC且可访问所需载具
* **重置按钮:** 快速重启功能
* **性能监测:** 监控性能回退问题,如意外的CPU热点路径
此环境专为快速、低开销的修改测试而设计。
## 下一目标:B2隐形轰炸机
视频概述了后续阶段(本文字稿未详述)。待开发环境稳定后,项目将进行:
1. **修复渡渡鸟飞机物理特性:** 改进现有飞机的飞行表现
2. **添加B2轰炸机:** 包括在Blender中创建新飞机模型、定义飞行参数、实现碰撞检测及添加轰炸功能
3. **总结:** 汇总研究发现
核心工程挑战在于系统性地分解与解决复杂问题——从平台特定错误到从零构建新游戏系统。
**来源:** YouTube - 最普通的C++项目:在GTA 3中编写B2隐形轰炸机 (https://www.youtube.com/watch?v=OQM42Ee0fn8)
相似文章
@Daniel_Farinax: Qwen3.6-27B 在 MacBook Pro M5 128GB 上运行。游戏的第三个版本,这次是一个低多边形 GTA,使用自定义工具通宵构建完成。
Daniel Farinax 演示了在 MacBook Pro M5 128GB 上运行 Qwen3.6-27B,使用自定义的 Rust 命令行工具(MPTLX)通宵构建了一个低多边形 GTA 游戏,声称其速度极快,堪比本地运行的 Claude 4.6。
另一个 Qwen 3.8 27B 展示 - GTA 风格提示 - 也提醒在你的配置中使用 ngram。
一个使用 Qwen 3.8 27B 模型配合128k上下文创建完全可玩的 GTA 风格游戏的展示,包括性能基准和配置提示。
这个周末你打算做什么?
一位开发者描述了将《完美黑暗64》关卡移植到 noclip.website 的过程,强调了读取 N64 显示列表和重新实现渲染引擎的挑战。
重制 Party House
一位开发者讲述了使用 Godot 和 Claude 将 UFO 50 中的 Party House 重制为浏览器游戏的过程,分享了游戏开发心得,并发布了可玩版本。
给Fable一个提示:“构建一个.kkrieger的Linux致敬版本。”它在一个C文件中交付了一个51KB的程序化FPS——然后通过截取其无头渲染的截图并实际查看来进行调试
一位开发者用单个C文件创建了一个完全程序化生成的致敬.kkrieger的第一人称射击游戏,生成了一个51KB的二进制文件,在运行时合成所有资产,并通过无头截图进行了验证。