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

    [回上页]

      CSpaceFrame使用CGameFrame作为功能基础,重载了许多关键的虚函数,颇加入了一些专用于实现游戏的非虚函数。CSpaceFrame::InitGraphics首先调用CGameFrame::InitGraphics,它建立我们的DirectDraw对象,设定图形模式,建立基本的切换界面,调用InitPalette。CSpaceFrame::IntitGraphics然后建立两个DirectDrawSurface,一个用来显示帧率,另一个显示任何绘制在屏幕上的文字。我们也建立并装入了游戏中用到的所有CAnims。CSpaceFrame的Restore函数调用CGameFrame::Restore以恢复基本界面内存,然后恢复帧率及文字界面,当然也调用所有CAnims的Restore。

      为接管游戏处理,CSpaceFrame也重载了UpdateGame。没必要调用基类版的UpdateGame,因为它只简单的返回TRUE。UpdateGame是我们的基本的主游戏循环,以固定时间间隔被CGameApp::Run调用,并且是游戏真正的核心。UpdateGame确切的实现是相当简单的,因为所有复杂的工作都分解到各辅助函数里了。处理过程的本质是:

      *移动精灵

      *碰撞检测

      *用黑色清屏

      *绘制精灵

      *切换页

      我们用一个经典的双向链表结构表示精灵。这里是取自SpaceFrame。h的定义:

    typedefstruct_SPRITE
    
    {
    
    struct_SPRITE*pNext;
    
    struct_SPRITE*pPrev;
    
    SpriteTypeeType;
    
    doubledPosX,dPosY;
    
    doubledVelX,dVelY;
    
    intnDirection;
    
    intnFrame;
    
    intnDelay;
    
    CAnim*pAnim;
    
    }SPRITE;
    

      头两个变量指向链表中前后精灵,链表是循环的,最后个精灵的pNext指向表头。eType成员决定精灵的类型是用哪种节点表示的,可能的值为typeShip,typeEnemy,和typeBullet。nDelay变量用来减慢敌人和子弹的动画速度及船发射子弹的速度。

      CSpaceFrame的许多函数用于处理精灵清单。移动精灵(MoveSprites)循环经过整个链,改变量精灵的位置、速度、需要的帧号信息。每种类型的精灵的处理略有不同;如果,当前更新船时,MoveSprites取出键盘决定精灵运动。CollideSprites包含所有的碰撞检测代码,并象MoveSprites相似的循环经过列表并用略有不同的方式处理每种类型的精灵。

      当一个碰撞出现时,CollideSprites会根据相关精灵的类型适当动作。DrawSprites用于绘制所有的精灵到后缓冲。它循环经过整个列表,调用每个精灵CAnim的Render成员函数。函数AddSprite和RemoveSprite用于从列表中动态增加及删除精灵。并且m_head是列表的头及玩家的船,被保存在堆栈(stack)。

      你可以从PCMagazineOnline下载游戏的全部代码,1996.8的volumarchive里有。(see the side bar"Guide to Our Utilities"in this issue"s Utilities column for down loading in structions)。编译程序步骤如下:


    [下一页]

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



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

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

Copyright © 1996 - 2004 SINA Inc. All Rights Reserved

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