资源描述:
《游戏开发技术6new》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、站长专用!!游戏开发技术6在射击游戏中的子弹的发射,每一帧都要检测上一帧时子弹的位置a然后确定当前帧子弹的位置b然后将该位置传给重画游戏单元的部分,在当前帧b的位置贴上子弹的图象。在即使战略游戏中两军对战时,程序在每一帧都要根据上一帧每个战斗单位的位置和该战斗单位移动的目的、到该目的之间的障碍物的位置以及一定的路径算法确定在当前帧该战斗单位的新位置;还有要取得在上一帧时该战斗单位的生命值和所受的打击次数及强度,以确定该战斗单位的生命值。通过阅读ProcessInput()函数的代码,我想您一定已理解了刷新游戏单元的概念。而从上面的两个例
2、子中,您也一定发现用例程的方法很难实现这两类游戏的要求。我们不可能对每一颗子弹,每一个战斗单位进行操作,而且我们并不知道游戏者会一次发射多少颗子弹也不知道游戏者会造多少个战斗单位。我们应该怎么办呢?考虑到每一个战斗单位(或每一颗子弹)都有相似(或相同)的属性,那么我们可以采用结构数组来储存每一个战斗单位的位置和状态。这个办法好象可行!但是仔细想想,我们又遇到了上面谈到的问题我们并不知道游戏者会一次发射多少颗子弹也不知道游戏者会造多少个战斗单位。当然我们可以采用AgeofEmpire的方式----限制单位的数量(我并不是说AgeofEmp
3、ire采用的是这种办法)。但是这意味什么呢!意味着,如果我们限定数量为50的话,在游戏者只有一个士兵时,计算机却需要为这个士兵分配50倍的内存!而且游戏者还不一定造出50个士兵。显然这并不是一个好办法!我们应该怎么办呢?链表!链表能满足我们的要求。classNode{ file://双向链表的指针。 Node* Next; Node* Pre; file://节点数据。 NODE_DATA data; ...};链表是一种结构
4、体的集合。在链表中的每一个结构体都包含了一个元素或指针,它指向链表中的另一个结构体。这个指针用作两个结构体之间的联系。这个概念与数组有些相似,但它允许链表的动态增长。现在的游戏中凡是遇到这种问题的一般都是采用链表的。关于链表的更多的信息请阅读有关的资料。第六节画游戏单元画游戏单位的作用是在每一桢往屏幕上画游戏单位的图象。这就是本例程中画游戏单元的主函数:/* *NewGameFrame */intNewGameFrame(void){file://这里是设置游戏单元的位置: SetSpriteX(hFox,0,P_AUTOMAT
5、IC); SetSpriteY(hFox,0,P_AUTOMATIC); SetPlaneVelX(hBackground,GetSpriteVelX(hFox),P_ABSOLUTE); SetPlaneVelX(hMidground, GetSpriteVelX(hFox),P_ABSOLUTE); SetPlaneVelX(hForeground,GetSpriteVelX(hFox),P_ABSOLUTE); SetPlaneX(hBackground,0,P_AUTOMATIC); SetPlaneX(
6、hMidground, 0,P_AUTOMATIC); SetPlaneX(hForeground,0,P_AUTOMATIC); SetSpriteX(hBear,0,P_AUTOMATIC); SetSpriteX(hApple,0,P_AUTOMATIC); SetSpriteY(hApple,0,P_AUTOMATIC);file://将游戏单元的图形贴到BackBuffer上: if(bTransDest) { gfxFillBack(dwColorKey); DisplayFr
7、ameRate(); DisplaySprite(hBuffer,hApple,GetPlaneX(hForeground)); DisplaySprite(hBuffer,hBear, GetPlaneX(hForeground)); DisplaySprite(hBuffer,hFox, GetPlaneX(hForeground)); DisplayPlane(hBuffer,hForeground); DisplayPlane(hBuffer,hMidground);
8、 DisplayPlane(hBuffer,hBackground); } else { DisplayPlane(hBuffer,hBackground);