游戏开发基础(9)

游戏开发基础(9)

ID:20530895

大小:44.00 KB

页数:10页

时间:2018-10-13

游戏开发基础(9)_第1页
游戏开发基础(9)_第2页
游戏开发基础(9)_第3页
游戏开发基础(9)_第4页
游戏开发基础(9)_第5页
资源描述:

《游戏开发基础(9)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、游戏开发基础(9)第一节窗口的移动和改变大小时caseWM_SIZE:caseWM_MOVE:if(IsIconic(hWnd)){   Msg("FoxBearisminimized,pausing");   PauseGame();}if(bFullscreen){   SetRect(&rcWindow,0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));}else{   GetClientRect(hWnd,&r

2、cWindow);   ClientToScreen(hWnd,(LPPOINT)&rcWindow);   ClientToScreen(hWnd,(LPPOINT)&rcWindow+1);}Msg("WINDOWRECT:[%d,%d,%d,%d]",rcWindow.left,rcWindow.top,rcWindow.right,rcWindow.bottom);break;caseWM_SIZE:是在窗口的大小被改变时发送的。caseWM_MOVE:是在窗口被移动时发送的。当收到这两个

3、消息后,首先检测窗口是否最小化了,如果是则暂停游戏。否则再检测游戏是否转为全屏模式,若是则改变用户区的大小为全屏。如果只是改变了窗口的大小但并没有使显示模式变成全屏或窗口最小化,则先取得窗口的用户区坐标(左上角的x、y及右下角的x、y的值)将之存入结构rcWindows,再将rcWindows中的坐标转换为屏幕坐标。请注意rcWindows是RECT型的结构,但ClientToScreen()要求的是POINT型的结构,在结构RECT中存放的是一个矩形的左上角的x、y及右下角的x、y的值而结构PO

4、INT中存放的就只是x和y的值。故此在 ClientToScreen(hWnd,(LPPOINT)&rcWindow);ClientToScreen(hWnd,(LPPOINT)&rcWindow+1);中先对rcWindow进行强制类型转换,而且两次调用该函数,同时在第二次掉用时使rcWindow的地址自加1。第二节窗口被激活时 caseWM_ACTIVATEAPP:bIsActive=(BOOL)wParam&&GetForegroundWindow()==hWnd;if(bIsActive)

5、   Msg("FoxBearisactive");else   Msg("FoxBearisnotactive");if(bPaused&&bIsActive){   if(RestoreGame())   {       UnPauseGame();   }   else   {       if(GetForegroundWindow()==hWnd)       {           if(InitGame())           {               UnPauseGame

6、();           }       }   }}break;caseWM_ACTIVATEAPP:当不同于当前窗口的应用程序的窗口被激活时发送本消息。当接收到这个消息时,首先令bIsActive等于(BOOL)wParam&&GetForegroundWindow()==hWnd,然后检测bIsActive是否为TURE。这里的意思就是检测游戏的窗口是否被激活且处于当前系统中最高优先级。接下来先检测游戏窗口是否是从暂停状态到激活的状态,若是则运行RestoreGame()从新开始,若Res

7、toreGame()成功则运行UnPauseGame(),如果不是从暂停状态到激活的状态,则检测本程序的窗口是否拥有最高的优先级,若有则从新初始化游戏(运行InitGame()),初始化成功后则运行UnPauseGame()。第三节实现逻辑调色板时 caseWM_QUERYNEWPALETTE:if(!bFullscreen&&lpPalette&&lpFrontBuffer){   HRESULTddrval;   ddrval=IDirectDrawSurface_SetPalette(lpF

8、rontBuffer,lpPalette);   if(ddrval==DDERR_SURFACELOST)   {       IDirectDrawSurface_Restore(lpFrontBuffer);       ddrval=IDirectDrawSurface_SetPalette(lpFrontBuffer,lpPalette);       if(ddrval==DDERR_SURFACELOST)       {           Msg("Failedt

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。