这些天看了几个开源引擎的代码,了解了一下结构设计,就一个感觉——太复杂了。但是基本上就是这么几个部分:基本(包括多线程,数学方法,文件I/O),2D显示,UI,声音,网络等。这是个大工程,得一步步慢慢来。
为了适应几种平台,要将系统事件独立出来,我建立了一个TG_Main的对象。各种平台的代码首先创建这个对象的实例,并接收各种事件(程序切换前后台,按键,电话事件,短信),通过CIdle产生的系统TICK事件形成游戏循环。在开发游戏应用时,直接继承这个对象,并重写OnInit、OnLosingForeground、OnGainingForeground、OnNotify、OnNextFrame、OnDestroy等事件处理方法,专注于游戏逻辑。
为了能及时了解游戏执行的效率,我加了TG_FpsCounter,由于系统TICK时间精度比较低,而且在模拟器和真机上不同,所以每两秒计算一次可以提高精度。通过HAL::Get( HALData::ESystemTickPeriod, iTicksPerSecond )得到每秒的TICK数,就可以算出每次TICK需要的微秒数,经过多次刷新屏幕后用User::TickCount()可以算出使用的TICK数,接下来就可以算出相对精确的每秒帧数。
还写了个简单的LOG调试记录器,提供了整数(2进制,8进制,10进制,16进制)、实数、字符串等的方法,还提供了整数和字符串的静态方法。
添加这些对象后为引擎其它部分的开发打下了基础,方便了以后的开发。
为了适应几种平台,要将系统事件独立出来,我建立了一个TG_Main的对象。各种平台的代码首先创建这个对象的实例,并接收各种事件(程序切换前后台,按键,电话事件,短信),通过CIdle产生的系统TICK事件形成游戏循环。在开发游戏应用时,直接继承这个对象,并重写OnInit、OnLosingForeground、OnGainingForeground、OnNotify、OnNextFrame、OnDestroy等事件处理方法,专注于游戏逻辑。
为了能及时了解游戏执行的效率,我加了TG_FpsCounter,由于系统TICK时间精度比较低,而且在模拟器和真机上不同,所以每两秒计算一次可以提高精度。通过HAL::Get( HALData::ESystemTickPeriod, iTicksPerSecond )得到每秒的TICK数,就可以算出每次TICK需要的微秒数,经过多次刷新屏幕后用User::TickCount()可以算出使用的TICK数,接下来就可以算出相对精确的每秒帧数。
还写了个简单的LOG调试记录器,提供了整数(2进制,8进制,10进制,16进制)、实数、字符串等的方法,还提供了整数和字符串的静态方法。
添加这些对象后为引擎其它部分的开发打下了基础,方便了以后的开发。