SouTek-自己的游戏引擎,已经做的有些时间了,不过此间一直是断断续续,进展不够系统,毕竟这是给自己做的东西,如果有更重要的事情或项目时只能做出让步。但不管如何,尽量在毕业之前搞定大部分吧。现在将此前已经实现的部分做一些总结置于博客上,一方面做为工作的标记另一方面也为后期工作做些总结与规划。
引擎的第一个主部分是UI系统,而UI的主要原则就是尽可能地简约。最典型的例子就是Source引擎下的半条命中的UI系统,其尽管简单却令人印象深刻且操作方便。其实,现在想来觉得不使用第三方库,转而来做自己的UI系统是一个不太好的想法,毕竟这部分也需要很大的工程量,而且做出来之后有没有美感、效果如何等还是很重要的问题。不过由于最初已经决定了实现自己的UI系统,而且此前已经实现了大部分的工作,那就将它彻底完成得了。在目前的情况看来对ST的UI系统还是比较满意的。
ST的UI系统主要可以分为下面几大部分(有的在工程中实现性比较强,有的只是这么一个概念,并没有明确与之对应的部分):
1. 输入部分
主要包括鼠标与键盘的输入,主要用来响应外部的硬件事件而与用户之间产生交互,进而对UI进行实际的控制。这里直接使用引擎中已经实现的STInput库即可。
2. 窗体管理
这是整个UI系统的核心部分。它对各个独立的窗体控件进行有机的组织,并负责UI系统的主循环、控件生存状态的管理、窗体消息的传递与发送、UI音效的管理等。这部分实现的状况直接影响整个UI系统的效率与效果。
3. 窗体绘制
负责窗体的绘制与显示,是窗体管理的子部分。但对于各个控件的绘制,则由其来身来实现,直接继承自控件的虚基类并实现其自身的绘制操作即可。
4. 窗口消息
这是窗口响应外部消息的关键部分,同样也是窗体管理的子部分。消息的传递与发送由窗体管理部分负责,对消息的响应则类同于窗体的绘制,对于不同的窗体控件有其自身相应的操作。而且窗体控件对于消息的响应结果可以被窗体管理器接收并识别,而做出相应的数据处理。
5. 控件分类
窗体控件的分类与常见的MFC控件相类似,不过引擎中只实现了自己目前需要的一些典型控件。
主要包括:
a. 按钮
b. 对话框
c. 静态控件(包括文字、图像、动画等类型)
d. 单选钮
e. 列表控件
f. 滚动条
g. 进度条
h. 编辑框
其它更多的控件类型通常也可以由这些基本的类型进行组合即可得到。
6. 资源编辑器
为了更方便地对游戏生成相应的UI系统,需要实现一个资源编辑器。它其实是一个可视化控件管理系系统,并在一定程度上实现所见即所得的效果。在具体的实现中是将可视化的编辑结果以格式化的方式生成初始化文件并加入必要的信息然后藕合到游戏中即可,然后只需要少量代码即可将此系统与最终游戏相关联。
目前,UI系统的效果如下图中所示: