我們準備開始設計遊戲核心。
通常,遊戲和桌面windows程式不同(掃雷等桌面遊戲除外),它不能依賴訊息驅動,因為遊戲通常只有乙個畫面,而且需要高速更新。因此,遊戲只能靠時鐘驅動。大部分遊戲都在乙個時鐘驅動下定時渲染一幀畫面。此外,遊戲需要接收使用者輸入,處理遊戲事件(比如碰撞檢測等),可能還需要ai計算,這些任務都必須巧妙地在兩幅畫面切換的時間段裡處理完畢,因此,乙個高效而靈活的排程器就是遊戲程序的核心。
排程器由時鐘驅動器和任務管理器組成。
時鐘驅動器負責在需要的時候向排程器提供準確的虛擬時間,虛擬時間流逝時,遊戲就執行,虛擬時間停止時,遊戲就暫停,虛擬時間還可以比真實時間慢或者快,以便調節遊戲執行速度,所有的任務都依賴虛擬時間,並且它們不知道時鐘是否暫停,這樣就大大簡化了時間的表示和運算,我們可以隨時暫停時鐘從而能夠方便地除錯。
排程器的作用便是把時鐘提供的虛擬時間按固定時間段(比如20ms)分成若干幀,在乙個幀的時間段裡,依次排程所有的幀任務和定時任務,最後執行渲染任務,從而完成乙個完整的幀。
排程器就像是在模擬乙個執行緒管理器,它必須非常靈活,首先,排程器依次執行佇列中的任務,可以精確計算每個任務花費的時間。如果使用者硬體配置不高,執行乙個完整的幀花費的時間多於預算,則可以在下乙個幀裡跳過不必要的任務(比如關閉特效,特效任務就是可以跳過的),如果執行乙個完整的幀花費的時間小於預算,則可以多執行一些任務,比如多畫一些特效或多做一些ai運算等,這些都由排程器自動調節。
排程器的另乙個功能是實現平滑地新增和刪除任務,通常遊戲中的任務更新都很頻繁。如果使用多執行緒,則執行緒的建立和銷毀將耗費大量時間。
排程器執行一幀的流程如下:
由於只需要用到很少的api,我決定用j2se來寫核心,這樣便於除錯,等測試無誤再移植到midp上。
參考:marshall:"game programming gems 3"
待續:)
使用MIDP2 0開發遊戲 6 設計Clock
clock負責提供乙個真實時間和乙個虛擬時間,真實時間從0開始按ms遞增,和硬體時鐘是同步的 虛擬時間也從0開始按ms遞增,但不一定和真實時間同步。要獲得系統時間可以用system.currenttimemillies 系統硬體有乙個計數器,當計算機啟動時,計數器從0開始每1ms加1,system....
使用MIDP2 0開發遊戲 6 設計Clock
clock負責提供乙個真實時間和乙個虛擬時間,真實時間從0開始按ms遞增,和硬體時鐘是同步的 虛擬時間也從0開始按ms遞增,但不一定和真實時間同步。要獲得系統時間可以用system.currenttimemillies 系統硬體有乙個計數器,當計算機啟動時,計數器從0開始每1ms加1,system....
使用MIDP2 0開發遊戲 3 新增背景和前景
上次我們已經讓坦克動起來了,現在我們準備給遊戲新增背景和前景。上次討論了用sprite實現動畫,其實背景和前景也是用sprite實現的,我們準備一幅背景和一幅前景 注意背景可以不透明,但前景一定要處理成透明的png格式 以上均為jpg截圖,請自行用photoshop等轉換 修改tankgamecan...