一般的**是這樣的
while(1)
else
}如果有使用者輸入,則處理輸入,沒有則呼叫mainloop處理具體的遊戲邏輯。處理訊息輸入的**是這樣的
switch(msg)
;handlelb***own(pt);
...}
處理遊戲邏輯的**應該是這樣的
void mainloop()
簡單總結,遊戲引擎就是乙個不斷處理輸入事件的機器,並輸出處理的結果,同時需要記錄當前的狀態。
輸出主要包括兩個部分:畫面顯示和網路輸出。
當前狀態就是指引擎的整個記憶體狀態。
輸入部分比較複雜,包括幾個部分:
1,使用者滑鼠鍵盤等的輸入,這個最常見
2,定時器的輸入,比如動畫和指定時間的什麼操作
3,隨機數的輸入,粒子效果中經常用到
4,網路輸入,遊戲邏輯的另乙個重要的部分就在這裡了。
其中,定時器是確定的,而其它三個是隨機的。
再次總結,遊戲迴圈可以抽象成3部分:
1,處理輸入
2,執行引擎邏輯
3,渲染
其中執行引擎邏輯和渲染可以交給引擎去做,而處理輸入可以交給指令碼去做。但是指令碼並不適合獲取輸入資料,可以再次抽象:
1,獲取輸入並快取,這個需要在訊息處理函式中快取使用者操作,而不直接處理訊息
2,呼叫指令碼處理輸入,並會清空上一步驟的輸入快取
3,執行引擎邏輯
4,渲染
寫了這麼多,這樣處理會有什麼好處?快取輸入和即時處理輸入有什麼不同。
在unix中,把所有的輸入裝置都可以抽象成乙個檔案,這一原理同樣適合於遊戲引擎。
我們不關心網路資料具體來自於**,是真正的網路還是還是乙個模擬的網路,甚至可以是乙個普通的檔案。
在處理滑鼠時間的適合,至多有乙個週期的延遲,相對網路延遲這個可以忽略不計。
這一的處理方式,我們就可以記錄下任何乙個輸入,如果想對遊戲進行錄影,就可以把這些輸入儲存成乙個檔案。
錄製的時候,我們在快取輸入的時候同時還儲存輸入到檔案。
錄影回放的時候,我們不從輸入快取獲取資料,而是從此前儲存的檔案讀取資料。
遊戲本身就是乙個狀態機,輸入一定,則狀態就會一定,這樣,我們就可以實現錄影回放。
話說,cocos2d-x並沒有採用這樣的結構,估計作者根本沒有想到錄影的功能
迴圈報數遊戲。
迴圈報數遊戲,有n個人,每乙個人編號從1開始,依次編號到n。從1到3報數,報3的退出遊戲,得出最後獲勝人的編號 關鍵在於構成環的這個下標問題如何解決?解題思路 解決了構成環的關鍵問題,接下來就是依次遍歷計數,當報到3的那個給乙個標記 1,相應的陣列長度要減少。且計數重新開始,最後,重新遍歷一遍,返回...
Visual C 遊戲程式設計基礎之遊戲迴圈
1.函式原型 boolpeekmessage lpmsgipmsg,hwndhwnd,uintwmsgfiltermin,uintwmsgfiltermax,uintwremovemsg 功 能 用於檢測訊息,檢測到了就返回非0值,否則返回0 引數一 接收訊息資訊的msg結構指標 引數二 其訊息被檢...
新增DTS到遊戲
這是乙個關於匯入dts物件到遊戲或者任務檔案的非常基礎的說明。當我們自己開始進入這個過程,我發現某些方面難以理解。現在我想它已經很清晰了,我想它應該提供一些簡單的引導性的文章給初學者。本質上有兩種dts物件,基於torque的遊戲 complex。物件不做任何事情,只是位於那裡,如舞台布景,它們沒有...