遊戲製作之一 坦克的移動

2021-06-17 15:33:00 字數 1612 閱讀 7953

這篇文章參考了一位仁兄的部落格 mfc坦克定位,但對之做出了一些細節上的修改,主要目的呢是為了加深自己的記憶。文章內提到的有mfc 位圖繪製,鍵盤訊息的響應

原文章傳送門

這次的主要內容是使用vc的mfc製作乙個很小很小的遊戲,功能很簡單,視窗上顯示一輛坦克,按上下左右即可操作坦克進行不同方向的移動。以後我將把這個遊戲功能進行更多的擴充套件,達到學習目的,以此提公升自己。

1.首先在vc中新建乙個mfc工程,選擇基本對話方塊。

2.在dialog類中新增幾個變數,int m_x,m_y,這兩個是為了記錄坦克的初始化以及移動位置。

cbitmap m_bitmap 這個變數是為了載入位圖資源,也就是坦克的。

3.新增坦克的點陣圖,在插入中新建自己畫或引入外部資源皆可。

4.接下來就是初始化了。

bool cmydlg::oninitdialog()

5.重寫onpaint函式

void cmydlg::onpaint() 

6.鍵盤響應訊息 

新增windows響應函式onkeydown,不過我在編寫時有個問題,鍵盤的上下左右無法響應,我在這個地方找到了答案

void cmydlg::onkeydown(uint nchar, uint nrepcnt, uint nflags)

this->invalidaterect(null); //擦除原先的,重新畫出(onpaint中)

cdialogex::onkeydown(nchar, nrepcnt, nflags);

}bool cmydlg::pretranslatemessage(msg* pmsg)

return cdialog::pretranslatemessage(pmsg);

}

到現在,就可以控制坦克的移動了。

本文重點。

1.mfc點陣圖繪製,mfc的繪圖機制,首先建立乙個cclientdc型別的dc裝置用以螢幕的顯示,以及乙個用於記憶體裝置的memdc,接著通過函式createcompatibledc()建立兩個裝置間的相容性,並申明memdc是關於dc的記憶體對映,在這裡我們只有一張圖,所以直接將記憶體裝置與點陣圖資源用selectobject繫結,如果是許多點陣圖的繪製,此時可以建立乙個臨時的點陣圖資源,然後使用這個記憶體裝置進行一系列的繪圖,最後將已繪製好的記憶體裝置內容拷貝到螢幕顯示裝置,從而實現繪圖。簡單的說就是通過記憶體裝置環境在記憶體中將整個框架的圖樣繪製好,然後拷貝到螢幕顯示裝置環境,實現螢幕顯示。這樣的好處是螢幕不會閃爍。

2.鍵盤上下左右的響應問題,原因是這樣的在對話方塊中響應鍵盤訊息時存在一些問題,當對話方塊中沒有控制項時,可以按普通視窗的方式來響應,即新增onkeydown()訊息響應,但當對話方塊中存在控制項時,由於窗體處於活動狀態,必有乙個控制項獲得焦點,不能通過在classwizard中新增wm_keydown來響應鍵盤輸入

。最簡單的辦法就是過載cwnd::pretranslatemessage即可,在這個函式中使用sendmessage傳送按鍵訊息,使得onkeydown能夠捕捉鍵盤訊息,從而響應上下左右。

坦克類遊戲的製作之路

近一年時間.做了一款坦克類的手遊.玩法類似於坦克世界手遊版.由此接觸了許多軍武類遊戲.研究了許多坦克世界的機制.成為了一名效率過千的入門玩家 這個品類確實不好做.分幾個方面來說.從產品方向上講 1.喜歡坦克的大多男性,喜歡軍事.對於坦克的歷史,屬性都很了解.數值上不能憑空發揮.2.想做競技類的遊戲玩...

Python製作經典坦克大戰小遊戲

python版本 3.6.4 pygame模組 以及一些python自帶的模組。安裝python並新增到環境變數,pip安裝需要的相關模組即可。t t感覺自己的 整體上邏輯還是很清晰的,也做了很多必要的注釋,所以這裡我只講主要的思路,一些實現細節請閱讀我的源 遊戲規則 遊戲有單人和雙人兩種模式,己方...

遊戲製作 在場景中移動(一)

場景是遊戲中的乙個重要元素,特別對於rpg遊戲來說場景的數量就更多了,所以現在我為一些想做遊戲的入門新手來講解一下,遊戲中的角色是如何在場景中實現移動的。今天我們要講的是以遊戲角色為中心的場景移動方式。以遊戲角色為中心的場景移動方式就是 除了到達場景的盡頭之外,遊戲角色始終在場景的中心的移動方式。現...