bada 2D游戲編程之三——游戲的基本結構
1,不同的角度看游戲結構
站在玩家的角度看游戲的話,游戲是由各個不同的界面組成的,並在各個界面之間進行跳轉。比如從游戲開始的“開始畫面”進入到游戲的“菜單畫面”再跳轉到“游戲畫面”等。玩家也根本不需要去了解這些畫面是如何實現的,是什麼樣的機制保證游戲去不斷的更新畫面等。
而開發者在從技術的角度去看游戲的結構時,可以化繁為簡,將游戲簡化為3個基本的模塊:輸入模塊、邏輯模塊和輸出模塊。
下面分別對這三個模塊各起的作用進行一些介紹:
1) 輸入模塊:負責接收各種輸入事件並進行相應的處理。在游戲中主要會處理兩種類型的事件,一種是用戶輸入事件,例如按鍵事件,觸摸事件(單點觸摸、多點觸摸);還有一種是傳感器事件,最典型的就是加速度傳感器的變化事件。在輸入模塊中主要就是監聽和接收這些事件,當這些事件到來時會對這些事件進行緩存或者立即執行等操作。
2) 邏輯模塊:邏輯模塊處理游戲中的各種邏輯變化。這是游戲中的核心部分,也是最復雜的部分,它與游戲的內容是密不可分的。常見的處理就是根據輸入模塊中接收到的事件來進行游戲的邏輯判斷,例如用戶按向上鍵來控制游戲主角向上移動,這個向上鍵的事件在輸入模塊接收到了並進行了前期的處理,在邏輯處理模塊,游戲會根據游戲邏輯來判斷游戲是向上走還是說此時已經碰到了牆壁而不能繼續向前。
3) 輸出模塊:游戲中主要有渲染和音頻播放兩種類型的輸出。渲染輸出是根據邏輯處理的結果,獲得界面上需要顯示的物體坐標,然後將他們繪制在屏幕上;而音頻輸出是根據邏輯處理結果來決定播放的音效,例如游戲中的物體發生了碰撞,則可以播放碰撞聲等。
2,游戲的驅動方式
將前面的輸入模塊、邏輯模塊和輸出模塊合成起來就夠成了游戲的運行框架。那麼通過什麼樣的方式來驅動游戲運行呢,驅動的方式不一樣,會直接影響到游戲的運行機制。常見的游戲驅動方式有兩種,一種是事件驅動,還有一種是時間驅動。
在事件驅動的游戲框架中,游戲只有當接收到輸入事件之後才會往下進行,進入到邏輯模塊和輸出模塊。如果沒有事件輸入的話,游戲則一直處於等待輸入的狀態,直到有輸入改變為止。例如在一個靜止不動的游戲畫面,在事件驅動的框架下,游戲會保持這個畫面不變,直到檢測到輸入事件後才會根據游戲邏輯運算的結果去渲染游戲畫面。
這樣在事件驅動方式下的游戲運行方式是:
而在時間驅動的游戲框架中,不管有沒有事件輸入,游戲都在不停的循環執行輸入模塊、邏輯模塊和輸出模塊。也就是在不斷的檢測是輸入事件,運行游戲邏輯,渲染畫面和播放音效。即使玩家看到的是一個靜止不動的畫面,它也是游戲不斷渲染產生的效果,只不過是由於每次渲染的內容是一樣的,看不到變化效果而已。
在時間驅動方式下的游戲運行方式是:
3,選擇合適的驅動方式
那麼在游戲開發中選擇哪種驅動方式來驅動游戲呢?其實現絕大多數的游戲都是采用的時間驅動方式,而且采用時間驅動是專業游戲的普遍做法。但這並不是表示事件驅動的方式就沒有市場了,它多用於簡單的游戲開發中,如象棋,圍棋數獨等游戲,這類游戲大多不需要實現復雜的動畫效果。
類型
優點
缺點
事件驅動
只有當有事件輸入時才進行會執行邏輯模塊和輸出模塊,這樣會節省系統資源
游戲會在所有接收事件輸入的地方運行邏輯模塊和輸出模塊,這樣會造成代碼上比較混亂,沒有進行集中處理
時間驅動
會對游戲中的輸入事件進行緩存,統一在游戲循環中進行處理,這樣邏輯上比較清晰。
游戲會循環運行,即使沒有事件輸入也會執行邏輯模塊和輸出模塊,比較消耗系統資源
本文出自 “badaeva” 博客,請務必保留此出處http://badaeva.blog.51cto.com/3433333/933862