新浪游戏 | 新浪首页
新浪首页 > 游戏世界 > 游民论谈 > 文章内容
M$新型快速图形API的实用观点
游民部落网友品雪

    [回上页]

      建立一个CAnim并不装入图像或为保存图像分配内存;这些在Load函数中真正发生,所以在使用CAnim之前必须先调用Load函数。Load函数实际上调用保护成员CAnim::InternalLoad,它也会被CAnim::Restore调用。

      InternalLoad函数建立一个单独的DirectDrawSurface,动画所有的独立图像在它的网格里绘制。之后CAnim::Render根据所需的帧序号索引网格。这是CAnim::Render的原形:

      HRESULTRender(intnX,intnY,intnFrameNum,LPDIRECTDRAWSURFACEpDestSurface,BOOLbTransparent=TRUE);

      前两个参数是动画左上角象素的x,y坐标。第三个参数是要绘制的帧号,接着是目的界面(使用后缓冲区)。

      最后一个参数用于设置透明位传送操作,默认为TRUE或支持透明处理。返回值是来衢标界面BltFast函数的HRESULT。返回该值的基本原因是为了判断界面是否已经丢失。始终应当将返回的HRESULT与DDERR_SURFACELOST比较,如果匹配那么恢复所有的界面。

      恢复一CAnim的个界面只要简单的调用一下Restore函数。Restore将先调用为拥有的界面调用IDirectDrawSurface::Restore,取回界面的内存。然后调用CAnim::InternalLoad(TRUE),将图像文件重拷到刚恢复的界面里。CAnim::Release只简单调用CAnim界面的IDirectDrawSurface::Release,这应该在C++对象解析之前完成。(通常忘掉调用这个函数没什么影响,因为主要的DirectDraw对象会在释放时释放所有的界面和调色板,但显式调用是良好的编程习惯。

    游戏

      我们的游戏是简单的,并不需要很长的解释。你是紫色的船;射击屏幕上所有的盒子以进到下一级,在那里会有更多的盒子。进入一个盒子丢一条命。丢三条命GameOver。左右键旋转你的船,上键加速,下减速,Ctrl开火,Esc退出。屏幕顶上的数字是游戏当前的帧率(帧/秒)。它只是指示当前游戏动画的平滑程度,用户不能控制帧速率。

      要运行游戏,系统中必须有GameSDK运行时文件。任何使用GamesSDK的游戏都会安装它们,如果已经装过这样的游戏就可以运行了。要编译代码,需要VisualC++4。x及GamesSDK,它目前包括在MSDNlevelII及VisualC++4.1里了。

      那么全部的源代码在哪里呢?我们决定使用C++的特性从我们已有的帧及应用程序类衍生建立一些类。这样我们可以分解,将通用的工作放到CGameApp和CGameFrame中,而把游戏相关代码放在CSpaceApp和CSpaceFrame类里。我们或许应该进一步分解,但我们不想被OOP弄得Crazy。注意CSpaceApp只由GetNewFrame和全局对象theApp组成。我们决定不把这些代码放进CGameApp,这样,通用代码在哪结束,游戏代码在哪开始会更清楚些。


    [下一页]

    发表及查看评论】【关闭窗口



游戏世界意见反馈留言板 欢迎批评指正 游戏咨询电话:请与各公司客服热线联系

新浪简介 | About Sina | 广告服务 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

Copyright © 1996 - 2004 SINA Inc. All Rights Reserved

版权所有 新浪网
北京市通信公司提供网络带宽