Day03_OpenTTD源代码框架分析

本文详述了OpenTTD游戏的启动流程,从解析命令行参数开始,接着加载资源,初始化窗口和画板,直至生成地图和欢迎页面,并进入主循环。重点介绍了种树(tree)的实现涉及的头文件、GUI窗口和交互指令。项目采用自定义控件库NWidget,以及函数指针调用方式。最后提供了思维导图下载链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

返回目录

首先,我们找程序的主入口,根据关键字 main( ,我们可以定位到 opentpp.cpp 的 openttd_main() 是程序的主入口。
在这里插入图片描述

我这里整理了 openttd_main() 调用的思维导图如下,可以在文章最下面下载这个文件
在这里插入图片描述

大致流程:
1.解析命令行参数(与大部分的c和c++处理初始化变量的方法类似,值得学习);
2.扫描指定路径获取文件列表(图形、音乐、音效、文字等);
3.初始化 窗口(Linux环境下是通过SDL2的方法开启窗口;
4.初始化Palettes(图片画板);
5.加载sprite到内存(这个Day05会专项讲解,就是把硬盘上的图片文件解密解压后,放到内存里备用)
6.生成地图的Tile(这个过程相当复杂,后面在Day11会详细讲解);
7.生成欢迎页面(也就是主菜单背景动画,后面我们可以了解到,这个动画实际就是一个正在运行的游戏存档)
8.进入主循环(这个步骤也有点复杂,会在每一个tick刷新界面、播放音乐和印象、响应玩家发起的鼠键指令等等)
9.如果接收到玩家发起的退出指令,调用ShutdownGame() ,执行关闭的相关操作。

接下来,我们看一下项目文件目录,主要包含三大类的文件,我们以 种树tree为例:
1.头文件:.h 结尾,如 tree_map.h 定义了与种树相关的 各类基础数据、枚举enum、结构体struct 及 函数方法等
在这里插入图片描述

2._gui文件: _gui.cpp 结尾,如 tree_gui.cpp 一般这种文件都有一个或多个 与界面窗口定义相关的参数定义,如下:
在这里插入图片描述

OpenTTD自己定义了一套 以NWidget开头的控件库,在 widget_type.h 这个头文件里面,我可以看到所有控件的合集,对于搭建窗口控件库感兴趣的同学可以深入学习这一部分的代码实现。
在这里插入图片描述

_gui文件里面定义窗口类都继承了 window 类
在这里插入图片描述

3._cmd文件,_cmd.cpp 结尾,如 tree_cmd.cpp 这一类的文件一般定义了交互指令,比如种一棵树、种一片树等,值得一提的是项目大量使用函数指针调用相应函数,因此,很多函数直接搜索调用者是查不到的。
在这里插入图片描述

最后,思维导图文件可以使用 https://www.xmind.cn/ 工具打开 xmind文件下载地址:

链接:https://pan.baidu.com/s/1SgYBIB1PoIC2ohhQdh2IIQ
提取码:c6cx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值