Donuts4 学习笔记(2)

OneTimeSceneInit

在这里面,首先做的工作就是找到donuts4.ini的位置,然后,确定出当前工作目录。确定了这个,才能保证donuts4可以顺利的找到其他的物体,比如texture或者model。

然后就是读取ini的信息了。读取以后,把ini文件加到了FileWatch中。这样的话,一旦ini文件更新了的话,就reload(还是无法理解为啥要FileWatch这个东西)。

在设置完成过后,就是一些相应的创建了。比如InputManager和3DDrawManager,还调用了它们的成员OneTimeSceneInit。然后,初始化了audio stuff和display stuff。

在创建了菜单以后(我真的没看到菜单……),游戏的State被设定在了LoadSplash上。

准备工作完成,游戏就要开始了。


CreateSoundObjects

在OneTimeSceneInit中,初始化audio stuff的工作是交给CreateSoundObjects()这个函数来完成的。在这个函数中,主要是声明了一个MusicManager的类。我对DX中的声音部分还不是太熟悉,所以这个可以留到以后再看。


InitDeviceObjects

InitDeviceObjects完成了对视频方面的初始化。首先是创建设备。这里要注意的是,IDriect3D9这个东西似乎没啥用,就是在创建设备的时候用一下,创建完就Release了。还有一点有趣的是,donuts在选择显示模式上也很完善:首先是按照从优到差对模式排序,然后逐一尝试,直到能有支持的模式为止。设定完了Presentation Parameter以后,就CreateDevice了。

创建完了设备,第二步是显示那个Loading的画面,自然也少不了声明相关的Font。

第三步是读取。程序Load了Sky,UI,Splash和Particle的Texture以及Sky Dome的mesh,而且还创建了一些vextex buffer。最后是Load了Enemy,Bullet和PlayerShip的model。

最后一步是创建Terrain Engine。另外,程序说把m_pShip加到display list里面去,使用的命令是:g_pTerrain->AddDisplayObject( m_pShip ),难道说,管理显示列表的是地形引擎?迷惑ing。


RestoreDeviceObjects

在Common Framework中,OneTimeSceneInit()和FinalClearup()是一对,用于创建和删除设备无关的东西(比如几何信息)。InitDeviceObjects()和DeleteDeviceObjects()是一对,用于创建和删除设备相关的信息。而RestoreDeviceObjects()和InvalidateDeviceObjects()是一对,不过这对函数的作用我一直都很模糊。

在这个里面,除了设置灯光和为Radar创建Texture外,就是调用其他的对象的RestoreDeviceObjects了。

据说,RestoreDeviceObjects是为了在Device Lost的时候可以很快的恢复。如果Delete再Init的话太费时间了。还是晕晕的,等问问高人们再说吧……


游戏开始

在UpdateScene中,果然看到了一个自动机。UpdateScene会根据当前的状态作出相应的动作。在APP类中,状态转换可以在任何位置进行。这样的话,就更加灵活。

在游戏Active了以后,Update的操作是由调用FrameMove()来完成的。

FrameMove()里面除了调用一些成员的FrameMove()外,比较主要的就是通过计算的方法把速度模拟为60Hz,这和FPS无关,是算出来的。我倒是更习惯于限帧了。在有就是一堆声音的东东,看起来DX Sound和DX Music比DX Graphics还要麻烦……

在RenderScene()中,首先还是看看是否发生了Device Lost。如果发生了的话,就先Reset,再Restore了。然后,就是按照当前状态进行渲染了。比如,当进行到Display Splash时,调用的是RenderSplash(),而要显示Level的时候,调用的是DisplayLevelIntroScreen(),而真正游戏的渲染用的则是RenderFrame()。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值