游戲編程導論 Chapter-05_第1頁
游戲編程導論 Chapter-05_第2頁
游戲編程導論 Chapter-05_第3頁
游戲編程導論 Chapter-05_第4頁
游戲編程導論 Chapter-05_第5頁
已閱讀5頁,還剩15頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第5章 為引擎添加位圖操作模塊內容提綱 5.1 位圖操作類的設計與實現5.1.1 位圖操作類需求分析5.1.2 位圖操作類的定義5.1.3 位圖操作類的實現5.2 利用位圖操作類設計游戲菜單類5.2.1 游戲菜單類的需求分析5.2.2 游戲菜單類的定義5.2.3 游戲菜單類的實現5.3 游戲菜單類應用實例第5章 為引擎添加位圖操作模塊為游戲引擎框架添加一個重要模塊位圖操作模塊,該模塊將以類的方式進行封裝。由于這個模塊與圖形操作相關,就將這個模塊命名為T_Graphic類。5.1 位圖操作類的設計與實現5.1.1 位圖操作類需求分析T_Graphic位圖操作類主要提供位圖加載、位圖繪制以及文字繪

2、制等功能。提供以下幾種繪制處理:1.原始位圖的簡單繪制;2.將原始位圖進行縮放繪制;3.將原始位圖進行縮放處理并指定透明度繪制;4.繪制指定背景顏色和透明度的空白位圖;5.讀取原始位圖中的局部區域,并可對這個局部區域進行縮放、指定透明度以及旋轉或翻轉處理后繪制。該處理已經實現,即PaintRegion()函數;6.逐幀動畫繪制,以PaintRegion()函數為基礎實現PaintFrame()函數;7. 文字繪制。PaintText()函數就是處理文字繪制的函數,無需再實現。8.設備環境的清除處理。有時需要清除當前設備環境中原來圖形的痕跡,以便繪制新的游戲畫面,需要一個專門函數來執行這個任務。

3、5.1 位圖操作類的設計與實現5.1.2-5.1.3 位圖操作類的定義和實現位圖操作類分別在T_Graphic.h和T_Graphic.cpp中實現。T_Graphic類定義和實現:實現代碼請參見教程類函數說明:HBITMAP_To_Bitmap()、PaintRegion()、和PaintText()函數的功能與上一章中闡述的同名函數一致。這3個函數可以參見上一章的實現代碼。 T_Graph類中的PaintImage()函數有3個重載形式:有3個參數的原型聲明用于原始位圖的簡單繪制;有5個參數的PaintImage()函數用于位圖縮放繪制;有6個參數的PaintImage()函數可以用指定透

4、明度對原始位圖進行縮放繪制。三個PaintBlank()函數都可以實現空白位圖的繪制:4個參數的PaintBlank()函數將第一個位圖句柄參數指定的位圖填充最后一個參數指定的顏色;6個參數的PaintBlank()函數采用GDI+實現,位圖透明度和顏色是通過其中的Color參數來指定;7個參數的PaintBlank()函數是采用GDI的AlphaBlend()函數實現相同的效果。CreateBlankBitmap()函數用于創建指定寬高和顏色的空白位圖;PaintFrame()函數專門用于動畫播放處理。5.2 利用位圖操作類設計游戲菜單類游戲菜單一般要求比較個性化,要與游戲內容和畫面風格相統

5、一,會采用專門設計的圖形或圖像來表現。 5.2 利用位圖操作類設計游戲菜單類以圖片作為菜單項的設計中,每一個菜單項至少由兩張內容相同,但在色調、顏色、大小或亮度等方面有一定差異的圖片組成。其中一張作為正常顯示用,另一張作為被選中時使用。5.2 利用位圖操作類設計游戲菜單類5.2.1 游戲菜單類的需求分析T_Menu類專門用于處理游戲開始界面和游戲結束、升級或暫停界面中的菜單菜單可以以純文字的形式呈現,也可以以圖片的形式呈現菜單的位置、菜單項文字、菜單個數、排列方式或在界面上的具體位置都可以按照要求設置菜單可以設置背景,支持純色背景或背景圖片。背景圖片還可以設置透明度本菜單類可以處理鼠標事件和鍵

6、盤事件。5.2 利用位圖操作類設計游戲菜單類5.2.2-5.2.3 游戲菜單類的定義和實現菜單類將分別在T_Menu.h和T_Menu.cpp中實現。T_Menu類的定義和實現:實現代碼請參見教程T_Menu類的函數分類: 信息設置函數:SetMenuBkg():設置菜單背景圖片SetBtnBmp():設置菜單中每個菜單項對應的圖片,只要指定圖片文件的路徑和文件名SetMenuInfo():將一個MENU_INFO結構體對象的值賦給T_Menu類中的同類型變量AddMenuItem():置菜單項,菜單項關鍵信息就是文字內容和在界面上的位置5.2 利用位圖操作類設計游戲菜單類操作函數:DrawM

7、enu():菜單繪制函數;MenuMouseClick():菜單鼠標點擊事件處理函數MenuMouseMove():菜單鼠標移動事件處理函數MenuKeyDown():菜單鍵盤事件處理函數DestroyAll():清空記錄菜單項信息的vector容器中的數據菜單索引值的獲取和修改函數:GetMenuIndex():計算當前鼠標光標所在位置是否在某個菜單項的矩形范圍內,如果是則返回該菜單項的索引號,供菜單繪制時使用SetMenuIndex():設置菜單當前的索引號供類內部使用的私有函數:GetAlignment ():將菜單信息中的對齊方式設置值轉換成能夠被函數調用識別的值GetFontStyl

8、e():將菜單信息中的字體風格的設置值轉換成能夠被函數調用識別的值5.2 利用位圖操作類設計游戲菜單類歸納:到目前為止,游戲引擎已經具備以下文件T_Config.h頭文件T_Display類(包括T_Display.h和T_Display.cpp文件)T_Engine類(包括T_Engine.h和T_Engine.cpp文件)T_Graph類(包括T_Graph.h和T_Graph.cpp文件)T_Menu類(包括T_Menu.h和T_Menu.cpp文件) 5.3 游戲菜單類應用實例準備圖片素材:5.3 游戲菜單類應用實例拷貝3個圖片素材文件到項目的res目錄中,分別命名:“menubkg.

9、jpg”“redroundbtn.png”“button.png”;菜單項:“新游戲”、“關于”、“幫助”、“退出游戲”;將上一章構建的項目拷貝一個副本,然后打開副本項目中的GdiplusTest.h頭文件,在其中基本代碼的基礎上,添加T_Menu.h頭文件引用語句,并定義一個T_Menu類對象。具體實現請參見教程和代碼工程。 5.3 游戲菜單類應用實例最終實現的效果:5.3 游戲菜單類應用實例將菜單項水平居中方式布局的代碼:/ 水平居中布局的坐標x =i*(btn_width+MENU_SPACE)+(wndWidth - 4*btn_width - 3*MENU_SPACE)/2;y =

10、wnd_height-2*btn_height;5.3 游戲菜單類應用實例將菜單項階梯方式布局的代碼:/ 階梯布局的坐標x =(wndWidth - btn_width)/2-btn_width+i*(btn_width/2);y = i*(btn_height+MENU_SPACE)+(wnd_height-4*btn_height-3*MENU_SPACE)/2;5.3 游戲菜單類應用實例將菜單項雙行雙列方式的布局的代碼:/ 2行2列坐標int col = i%2;int row = i/2; x = col*(btn_width+MENU_SPACE)+(wndWidth - 2*btn

11、_width-MENU_SPACE)/2;y = row*(btn_height+MENU_SPACE)+(wnd_height-2*btn_height-MENU_SPACE)/2;5.3 游戲菜單類應用實例將菜單項圖片改為圓形按鈕圖像,修改對應的文字顏色,產生上面四種同樣布局的圓形菜單項的效果:/ 圓形按鈕菜單項btn_width = 120;/ 菜單項圖片寬btn_height = 120;/ 菜單項圖片高normalClr = Color:White;/ 正常狀態文字顏色focusClr = Color:Yellow;/ 選中狀態文字顏色/ 菜單項圖片t_menu.SetBtnBmp(L

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論