2010-02-08 106 views
5

我對如何處理這個問題有一個想法,但我不確定它是否理想。例如,事件我的意思是,如果玩家獲勝,一堆火花飛行1秒鐘。我正在考慮創建我的遊戲引擎類,然後創建一個遊戲事件基類,它有3個void函數,更新,繪製和渲染。例如,可能有用於收集100個硬幣3秒鐘的火槍。我想要實現它的方式是在我的遊戲引擎中有一個事件向量,在這裏我可以推動fireforks動畫。一旦某個東西被推入向量中,遊戲會執行event [i] .render()等等...刪除它我認爲每個事件可以有幀中的事件長度,並且每個幀增加一個uint,如果uint與長度匹配,則從矢量中彈出。我只是不確定是否這樣做是最好的方式。在2D遊戲中如何處理遊戲事件長度

謝謝

回答

1

我會讓每個事件實例都有一個名爲isDone的方法,或者類似的東西。然後,對於每一幀,遍歷您的事件並:

if (event.isDone()) { 
    //remove the event 
} else { 
    event.update(); 
} 

這樣做可以使未來更輕鬆地進行更改。並非所有事件都會持續一段固定的時間(這可能不適用於您的遊戲),有些甚至可能依賴於當前幀以外的其他事件。

但在你eventBaseClass,你可以定義isDone爲:

return this.endFrame >= game.currentFrame; 

並在你需要的任何事件覆蓋它。

+0

我很喜歡這個!謝謝!,但是一直增加currectframe會導致溢出? – jmasterx 2010-02-09 00:16:02

+1

假設一個32位架構和每秒60幀,它會在828.5天后溢出:(2 ** 32)/ 60/60/60/24 – Ponkadoodle 2010-02-09 00:20:12

+0

啊,我需要刷我的數學:-p,謝謝,我這樣執行它,但我仍然認爲我應該做一個if,以便在828.5天后重置爲0 ;-) – jmasterx 2010-02-09 00:29:52

1

有很多很多不同的方法來剝皮這隻貓。例如,其中一個例程可能會返回一個布爾值,指示是否應該將此動畫從動畫隊列中彈出。我不確定更新,繪製和渲染之間有什麼區別,但除此之外的所有內容......

我的建議是閱讀。閱讀其他動畫引擎正在做什麼,去找一本好的圖形編程寶典,並從已有的和已建立的實現中收集想法和技術。一個更好的解決方案將是使用其中之一,節省你很多的痛苦和痛苦。

+0

除非他們是受虐狂。 – ChaosPandion 2010-02-09 00:06:41