会员: 密码:  免费注册 | 忘记密码 | 会员登录 网页功能: 加入收藏 设为首页 网站搜索  
游戏开发 > 程序设计 > 入门基础
游戏程式设计指南(HoHo篇)Lesson 2 — 完善篇
发表日期:2007-03-28 18:39:29作者: 出处:  

显示/隐藏应用程序菜单

  在MyGame.cpp文件中,找到MyRegisterClass()这支函数,这支函数是用来向Windows注册应用程序窗口,里面的 WNDCLASSEX结构就是保存了用户所需要的注册信息,此信息关系到你以后应用程序的属性设置;我们这里希望将原应用程序的窗口菜单关闭,因为游戏窗口一般不需要应用程序的菜单选项,找到:
    wcex.lpszMenuName = (LPCTSTR)IDC_MYGAME;
  改成:
    wcex.lpszMenuName = NULL;
 

关闭程序菜单
 

 

这样就能关闭掉游戏程序的窗口菜单。



让窗口不会被改变大小

  如果我们的窗口被改变大小,那么我们游戏的显示大小将受到改变,这是我们不希望看到的,现在,只要我们将程序窗口设定为不可改变大小,那么这个问题就自然而然的解决了。让我们回头看看我们程序的创建窗口函数InitInstance(),在CreateWindow(...)这句里面有 WS_OVERLAPPEDWINDOW这样一个参数,此参数就是用来说明创建出来窗口的风格,只要把窗口改为WS_POPUP,那么就可以让我们的游戏程序窗口不会被改动,不要问我这些参数是什么意思,这些东西在MSDN上面有详细的介绍,虽然是英文的。
 

设置窗口风格
 

 



移动窗口响应处理

  有没有发现我们的游戏程序窗口在被移动的时候会出问题?没关系,只要我们在窗口程序的消息响应函数里加入一点处理就可以轻松解决,我们先来看看图:

 

消息响应处理
 

 

如图所示,我们在WndProc()中加入一个WM_MOVE的消息处理(关于消息可以查阅MSDN),此消息是通知你应用程序窗口被移动过,我们只要相应的做出一些处理,就能解决上面的问题;看看我们加入了什么:

    if( GetGraphics() != NULL)
        GetGraphics()->UpdateBounds();

其中UpdateBounds()函数是HoHo图形部分的更新位置函数,你不需要知道它如何工作,只要知道它能做到就行了。:)



检测窗口是否被激活

  有时候我们的游戏窗口被玩家最小化,如果这时候我们不停的绘制图像,那会消耗很多的无用资源,同时也给用户带来了不便,我们完全可以让我们的游戏在被最小化的时候安静下来,减少对CPU的占用率。好,让我们来看看如何实现。和上面移动窗口的处理一样,加入对窗口激活的消息响应,不过在加消息之前,我们需要为程序加一个全局标记变量,如下:

    bool g_bActive = true;
 

添加全局变量
 

 


  这里我们使用g_bActive来作为标记,如果这个变量值是真,那么当前窗口处于激活状态,否则就是没有激活,消息代码片断如下:

    case WM_ACTIVATE: // 窗口的活動狀態
    {
        switch((LOWORD(wParam)))
        {
            case WA_ACTIVE:
            case WA_CLICKACTIVE:
                g_bActive = true;
                break;
            case WA_INACTIVE:
                g_bActive = false;
                break;
            default:
                break;
        }

        if( GetGraphics() != NULL )
            GetGraphics()->Restore();
    }
    break;

 

窗口激活消息
 

 

这部分处理只是通过消息响应来为g_bActive进行状态的变化,同时会帮你进行DDraw设备的重建,当然,这部分HoHo已经为你做好了,你可以不用考虑这些。现在让我们回头来看看我们的游戏循环,我们需要做一些处理,让我们的程序在最小化(非激活状态)的时候节省点CPU资源,如图:
 

游戏循环
 

 

好了,经过这样的处理,已经可以达到我们的要求,可能有些朋友要问,为什么要加一个Sleep(1)的操作?这里是利用Sleep(1)来将应用程序的进程系统资源占用率返回给系统,你只要打开Windows自带的任务管理器就可以看出两者的差别。



让游戏程序进入全屏方式

  说了半天都是围绕着游戏程序窗口模式的操作,现在我们来考虑一下如何让我们的游戏程序进入全屏状态,真正的游戏状态。使用HoHo要进入全屏模式是相当容易的,还记得Lesson1里面的初始化部分吗?

    g_pDisplay = CreatePlane2D( hWnd, 800, 600, true );

  改为:

    g_pDisplay = CreatePlane2D( hWnd, 800, 600, false );

是很容易吧!我想应该不需要图例了。 :-)



善尾工作,释放数据

  让机器工作了那么久,应该让它休息一下了,我们程序的退出一定要记得把我们用到的东西还给系统,虽然现在的操作系统会帮你收回,但是保持一个良好的习惯还是非常重要的,现在看看如何把HoHo释放掉。
  找到_tWinMain()函数,或者说是主函数吧,只要在函数的结尾部分加入:

    SAFE_DELETE( g_pDisplay );

这样就行了,是不是很简单?执行了这部操作,HoHo会帮助你将所使用的DirectX设备,包括图像的数据资源都会自动释放。


  今天就写到这里,一个初具形态的游戏窗口已经基本上完成了,下一回我们要去了解如何载入并且绘制图像,让我们来美化游戏的面容。

  本教程到目前为止的工程文件下载
  (此档案不包含HoHo游戏引擎库,如若程式无法执行,请根据所使用的HoHo版本附带的DLL库文件替换程式所执行目录中的同名文件。)

返回顶部】 【打印本页】 【关闭窗口

关于我们 / 给我留言 / 版权举报 / 意见建议 / 网站编程QQ群   
Copyright ©2003- 2024 Lihuasoft.net webmaster(at)lihuasoft.net 加载时间 0.00291