📄 游戏程式设计指南(hoho篇) lesson2.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0045)http://www.gameres.com/HoHo/Guide/Lesson2.htm -->
<HTML><HEAD><TITLE>游戏程式设计指南(HoHo篇) Lesson2 - GameRes.com</TITLE>
<META content=zh-cn http-equiv=Content-Language>
<META content="MSHTML 5.00.3700.6699" name=GENERATOR>
<META content=FrontPage.Editor.Document name=ProgId>
<META content="text/html; charset=gb2312" http-equiv=Content-Type></HEAD>
<BODY aLink=#ff9900 bgColor=#000000 leftMargin=0 link=#ff9900 text=#ffffff
topMargin=0 vLink=#ff9900><FONT face=Arial>
<TABLE border=0 borderColor=#111111 cellPadding=0 cellSpacing=0 id=AutoNumber1
style="BORDER-COLLAPSE: collapse" width="100%">
<TBODY>
<TR>
<TD width="100%"><A href="http://www.gameres.com/"
title="中国游戏开发技术资源网 - GameRes.com"><IMG border=0 height=47
src="游戏程式设计指南(HoHo篇) Lesson2.files/titlesmall.jpg" width=200></A></TD></TR>
<TR>
<TD width="100%"> </TD></TR>
<TR>
<TD width="100%">
<DIV align=center>
<CENTER>
<TABLE border=0 cellPadding=0 cellSpacing=0 id=AutoNumber2
style="BORDER-COLLAPSE: collapse" width="85%">
<TBODY>
<TR>
<TD bgColor=#151631 width="100%">
<P align=right><FONT size=1>林德辉(Sea_Bug)
</FONT></P></TD></TR>
<TR>
<TD width="100%">
<P align=center><FONT size=1> </FONT><BR><FONT
color=#ffffee><B>游戏程式设计指南(HoHo篇)<BR>Lesson 2 —
完善篇</B></FONT></P></TD></TR>
<TR>
<TD width="100%"> </TD></TR>
<TR>
<TD width="100%"><FONT size=4><B>序</B></FONT><FONT
size=2><BR><BR> Lesson1介绍了如何安装并且创建了最基本的HoHo引用程序,不过看起来似乎并不是很合适游戏,而且只要窗口被移动,或者最小化都会影响程序的正常使用,本章节可以告诉你这些细节如何处理。
此章节的内容不单单是为了HoHo游戏引擎所使用,实际上是讲述了Windows应用程序的控制方式,不管你是否使用HoHo,多了解一下用Windows
API来创建控制应用程序对你来说会有所帮助的。<BR><BR><BR></FONT><B>目录:</B><FONT
size=2><BR></FONT> <A
href="http://www.gameres.com/HoHo/Guide/Lesson2.htm#显示/隐藏应用程序菜单"
target=_self>显示/隐藏应用程序菜单</A><BR> <A
href="http://www.gameres.com/HoHo/Guide/Lesson2.htm#让窗口不会被改变大小"
target=_self>让窗口不会被改变大小</A><BR> <A
href="http://www.gameres.com/HoHo/Guide/Lesson2.htm#移动窗口响应处理"
target=_self>移动窗口响应处理</A><BR> <A
href="http://www.gameres.com/HoHo/Guide/Lesson2.htm#检测窗口是否被激活"
target=_self>检测窗口是否被激活</A><BR> <A
href="http://www.gameres.com/HoHo/Guide/Lesson2.htm#让游戏程序进入全屏方式"
target=_self>让游戏程序进入全屏方式</A><BR> <A
href="http://www.gameres.com/HoHo/Guide/Lesson2.htm#善尾工作,释放数据"
target=_self>善尾工作,释放数据</A><BR><FONT
size=2><BR><BR><BR></FONT><B><FONT size=4><A
name=显示/隐藏应用程序菜单>显示/隐藏应用程序菜单</A></FONT></B><FONT
size=2><BR><BR> 在MyGame.cpp文件中,找到MyRegisterClass()这支函数,这支函数是用来向Windows注册应用程序窗口,里面的WNDCLASSEX结构就是保存了用户所需要的注册信息,此信息关系到你以后应用程序的属性设置;我们这里希望将原应用程序的窗口菜单关闭,因为游戏窗口一般不需要应用程序的菜单选项,找到:<BR></FONT><FONT
color=#99ccff face=宋体 size=2> wcex.lpszMenuName =
(LPCTSTR)IDC_MYGAME;</FONT><FONT face=Arial
size=2><BR> 改成:<BR></FONT></FONT><FONT color=#99ccff face=宋体
size=2> wcex.lpszMenuName = NULL;</FONT><FONT face=Arial
size=2><BR> </FONT>
<DIV align=center>
<CENTER>
<TABLE border=1 borderColor=#002846 cellPadding=0 cellSpacing=0
id=AutoNumber3 style="BORDER-COLLAPSE: collapse" width="80%">
<TBODY>
<TR>
<TD align=middle bgColor=#001824 width="100%"><FONT
size=2>关闭程序菜单</FONT></TD></TR>
<TR>
<TD align=middle width="100%"><FONT size=1> <BR><IMG
border=0 height=440
src="游戏程式设计指南(HoHo篇) Lesson2.files/CreateAPP_7.gif"
width=492><BR> </FONT></TD></TR></TBODY></TABLE></CENTER></DIV>
<P><FONT face=Arial><FONT face=Arial
size=2>这样就能关闭掉游戏程序的窗口菜单。<BR><BR><BR><BR></FONT><B><A
name=让窗口不会被改变大小>让窗口不会被改变大小</A></B><FONT face=Arial
size=2><BR><BR> 如果我们的窗口被改变大小,那么我们游戏的显示大小将受到改变,这是我们不希望看到的,现在,只要我们将程序窗口设定为不可改变大小,那么这个问题就自然而然的解决了。让我们回头看看我们程序的创建窗口函数InitInstance(),在CreateWindow(...)这句里面有WS_OVERLAPPEDWINDOW这样一个参数,此参数就是用来说明创建出来窗口的风格,只要把窗口改为WS_POPUP,那么就可以让我们的游戏程序窗口不会被改动,不要问我这些参数是什么意思,这些东西在MSDN上面有详细的介绍,虽然是英文的。<BR> </FONT></FONT>
<DIV align=center>
<CENTER>
<TABLE border=1 borderColor=#002846 cellPadding=0 cellSpacing=0
id=AutoNumber4 style="BORDER-COLLAPSE: collapse" width="80%">
<TBODY>
<TR>
<TD align=middle bgColor=#001824 width="100%"><FONT
size=2>设置窗口风格</FONT></TD></TR>
<TR>
<TD align=middle width="100%"><FONT size=1> <BR><IMG
border=0 height=309
src="游戏程式设计指南(HoHo篇) Lesson2.files/CreateAPP_8.gif"
width=544><BR> </FONT></TD></TR></TBODY></TABLE></CENTER></DIV>
<P><FONT face=Arial><FONT face=Arial size=2><BR></FONT><FONT
size=2><BR></FONT><B><A name=移动窗口响应处理>移动窗口响应处理</A></B><FONT
size=2><BR><BR> 有没有发现我们的游戏程序窗口在被移动的时候会出问题?没关系,只要我们在窗口程序的消息响应函数里加入一点处理就可以轻松解决,我们先来看看图:<BR><BR> </FONT></FONT>
<DIV align=center>
<CENTER>
<TABLE border=1 borderColor=#002846 cellPadding=0 cellSpacing=0
id=AutoNumber5 style="BORDER-COLLAPSE: collapse" width="80%">
<TBODY>
<TR>
<TD align=middle bgColor=#001824 width="100%"><FONT
size=2>消息响应处理</FONT></TD></TR>
<TR>
<TD align=middle width="100%"><FONT size=1> <BR><IMG
border=0 height=325
src="游戏程式设计指南(HoHo篇) Lesson2.files/CreateAPP_9.gif"
width=382><BR> </FONT></TD></TR></TBODY></TABLE></CENTER></DIV>
<P><FONT face=Arial
size=2>如图所示,我们在WndProc()中加入一个WM_MOVE的消息处理(关于消息可以查阅MSDN),此消息是通知你应用程序窗口被移动过,我们只要相应的做出一些处理,就能解决上面的问题;看看我们加入了什么:<BR><BR></FONT></FONT><FONT
color=#99ccff face=宋体 size=2> if( GetGraphics() !=
NULL)<BR>
GetGraphics()->UpdateBounds();<BR></FONT><FONT face=Arial><FONT
face=Arial
size=2><BR>其中UpdateBounds()函数是HoHo图形部分的更新位置函数,你不需要知道它如何工作,只要知道它能做到就行了。:)<BR><BR><BR><BR></FONT><B><A
name=检测窗口是否被激活>检测窗口是否被激活</A></B><FONT face=Arial
size=2><BR><BR> 有时候我们的游戏窗口被玩家最小化,如果这时候我们不停的绘制图像,那会消耗很多的无用资源,同时也给用户带来了不便,我们完全可以让我们的游戏在被最小化的时候安静下来,减少对CPU的占用率。好,让我们来看看如何实现。和上面移动窗口的处理一样,加入对窗口激活的消息响应,不过在加消息之前,我们需要为程序加一个全局标记变量,如下:<BR><BR></FONT></FONT></FONT><FONT
color=#99ccff face=宋体 size=2> bool g_bActive = true;</FONT><FONT
face=Arial><FONT face=Arial size=2><BR> </FONT></FONT>
<DIV align=center>
<CENTER>
<TABLE border=1 borderColor=#002846 cellPadding=0 cellSpacing=0
id=AutoNumber8 style="BORDER-COLLAPSE: collapse" width="80%">
<TBODY>
<TR>
<TD align=middle bgColor=#001824 width="100%"><FONT face=Arial
size=2>添加全局变量</FONT></TD></TR>
<TR>
<TD align=middle width="100%"><FONT face=Arial
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -