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

    本文转贴自http://pinxue.yeah.net

      上次给出DirectDraw的浏览和用法(“UsingDirectDrawwithC++”,PCMagezineJune25,1996);现在是 更实用的看M$这个forWin95的快速图形API的时候了。本文将讨论可重用C++类(建议把DD封装在类中),及 我们使用这些类建立的游戏。[figure1]

      我们游戏开发方面的主要目标是演示DD及C++构成了多媒体开发的绝妙队伍。我们已经许多类,多数是基于 MFC的。(假定你对Windows编程及MFC和C++已有所知)。

      figure1:This Asteroids-style program use Driect Draw to speed display performace。

    框架

      我们的游戏主要包括两个类及其衍生类:CGameApp和CGameFrame。我们决定干掉M$VCAppWizard生成的 Doc/View,因为我们犯不上跟Doc/view结构纠缠。CGameApp是标准CWinApp子类。我们在CGameApp的 InitInstance函数里直接建立一个CFrameWnd来取代创建一个文档模板(这将建立主窗口):

      m_pMainWnd=GetNewFrame();

      ASSERT(m_pMainWnd!=NULL);

      m_pMainWnd->ShowWindow(SW_SHOWNORMAL);

      注意对GetNewFrame虚函数的调用,它建立当前应用程序主窗口类的一个实例。它发生在我们建立CGameApp和 CGameFrame衍生类时。

      我们应用程序类最重要的函数是Run,它被标准MFC处理过程在所有应用初始化工作完成后调用。在Run中,我 们完成所有的游戏初始化,然后循环直到PumpMessage函数返回TRUE��应用程序结果信号。我们使用

      PeekMessage检查任何已排队消息,如果返回TRUE,PumpMessage取得一条已经存在的队列消息并强制它通过 MFC的处理过程。

    if(::PeekMessage(&m_msgCur,NULL,NULL,NULL,PM_NOREMOVE))
    
    {
    
    //pumpmessage,butquitonWM_QUIT
    
    if(!PumpMessage())
    
    {
    
    GetGameFrame()->KillGraphics();
    
    GetGameFrame()->DestroyWindow();
    
    returnExitInstance();
    
    }
    
    }
    

      Run循环的下一部分是我们调用CGameFrame的UpdateGame函数的地方,它更新游戏内部,完成绘制并切换视频页:

    if(m_bPlaying)
    
    {
    
    if(!GetGameFrame()->UpdateGame())
    
    {
    
    StopPlay();
    
    PostQuitMessage(0);
    
    }
    
    }
    
    else
    
    {
    
    ::WaitMessage();
    
    }
    

      你会发现UpdateGame的真正主体是CSpaceFrame。StartPlay和StopPlay是另外两个重要的函数,它们支持重 新开始和暂停游戏。在CGameFrame的ActivateApp函数中,你会注意到我们在推动焦点时调用了StopLlay,在 获得焦点时调用了StartPlay。注意,StopPlay设置CGameApp成员m_bPlaying为FALSE,它将防止UpdateGame 被调用。当程序得到或失去输入焦点时OnActivateApp被调用,这是调用StartPlay和StopPlay的地方。当程序处理后台时不会进行循环。


    [下一页]

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



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

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

Copyright © 1996 - 2004 SINA Inc. All Rights Reserved

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