2013-12-19 33 views
0

我正在嘗試創建一個(非常基本的)遊戲。遊戲分爲兩個截然不同的部分,事件驅動部分除非玩家點擊按鈕,否則什麼都不會發生,而實時元素是用戶點擊按鈕但是響應實時事件。在單個遊戲中結合事件驅動和實時元素

我能想到的最好的例子是羅馬:全面戰爭系列。活動模式幾乎完全是事件驅動,戰鬥模式是活的。足球經理(管理模式/比賽模式)也類似。

我知道這是一個愚蠢的普遍問題,但你怎麼去編寫這樣的遊戲呢?有沒有關於這種事情的文件?

語言我想使用如果可能的話是C#

編輯:

的代碼片段舉例:

void UpdateCar1(GameTime gameTime, float speed) 
{ 
    a = (float)gameTime.TotalGameTime.TotalSeconds * speed * (float)(90 * Math.PI/(180*2.5)); 
    X = Math.Cos(a)*100; 
    Y = Math.Sin(a)*100; 
    Car1Position.X = 100+(int)X; 
    Car1Position.Y = 100+(int)Y; 
} 

這使得在一個圓圈Car 「驅動器」 周圍。

有一些代碼用於檢測「按鈕」上的鼠標按鈕點擊 - 它們只是使Car變得更快或更慢(爲了清晰起見編輯爲僞代碼)。

if (mouse.LeftButton == ButtonState.Released && previousButtonState == ButtonState.Pressed) 
{ 
    if ("button click occured within faster button rectangle") { "go faster" } 
    if ("button click occured within slower button rectangle") { "go slower" } 
} 

以上對於遊戲的實時元素來說都非常好。然而,對於事件驅動的東西,它似乎很笨拙,我不需要遊戲每秒更新60次,我只需要它來更新,如果按下按鈕。

我的問題是,是否有一種方法來結合這兩者,因爲它顯然已經完成了上述遊戲。

+0

還沒有一行代碼? – Tico

+0

許多小小的測試腳本可以用來測試一些東西,而且這是一個非常好的主意(至少我認爲是這樣)的類結構。毫無疑問,它會改變。我想我現在就要問這個問題了,現在我走了一條完全愚蠢的道路。在XNA中繪製按鈕以及不斷加載和卸載GUI元素似乎有點笨拙,如果窗口窗體如此整齊地處理它(除非當然不能做到實時的東西) – user2056166

+0

然後告訴我們!這個問題只會在downvotes中呈現。 – Tico

回答

0

將所有的實時操作放在運行「遊戲循環」的單獨線程中。

所有事件或者推到隊列中,然後遊戲循環輪詢或設置遊標循環cn檢查的標誌。

這樣,所有事件都以受控的方式與持續運行的循環分離。

遊戲循環將負責調用所有對象的「更新」方法,這些對象會導致對象移動,拍攝或任何它應該自己做的事情。

還是我誤解了這個問題?