2011-12-29 65 views
0

我想爲一個遊戲,比如pong做一個簡單的可重用引擎。我在時間和投入方面遇到麻煩。例如,使用XNA Game Class,更新方法每秒被激發60次。要在一個我從頭開始的課程中做到這一點,我會使用定時器還是完全不同的東西?C#遊戲循環和輸入

爲了澄清我的輸入問題,我將如何檢測按鍵事件(EX:按鍵被按下)?我認爲這與代表有關,但我不確定。

編輯:我沒有使用XNA。

+0

爲什麼你首先不使用XNA?任何具體原因不使用它? – smnbss 2011-12-29 23:28:47

+0

我正在使用MonoDevelop,因此我可以跨平臺。我有外部庫中的平臺特定代碼,用於繪圖等。只有Windows支持XNA。 – 2011-12-29 23:32:31

回答

1

您可能希望使用具有回調的定時器,或者甚至是完全是遊戲循環的第二個線程。我已經在Java和C#中完成了它;我傾向於使用計時器,因爲毫秒分辨率對於大多數遊戲來說足夠好。如果你想看一些(Java)示例代碼,請查看我的rudimentary game engine。至於遊戲輸入......那麼請查看示例代碼。它管理事件驅動的輸入並封裝它以便可以輪詢數據。 :P

或者,查看MonoXNA。它還不是100%完整的,但2D部分和基本遊戲的東西(遊戲循環,輸入等)是。

+0

感謝您的鏈接......我剛剛瀏覽了MonoXNA的Game.cs類,並且我已經能夠了解事情如何一起工作。我將下載源代碼並通讀所有內容,以瞭解它的所有功能(輸入,時序等)。我也將看看你的遊戲引擎。非常感謝鏈接。 – 2011-12-30 02:55:48

+0

沒問題。您可能需要直接使用MonoXNA,而不是重新發明輪子。 – GGulati 2011-12-30 19:34:36

0

您真正需要做的只是檢查更新方法中的鍵盤輸入。或者,您可以創建一個可以在更新方法中調用的updateInput方法。

private void updateInput() 
{ 
    KeyboardState newState = Keyboard.GetState(); 

    if (newState.IsKeyDown(Keys.Enter)) 
    { 
     // code goes here 
    } 
} 

就是這樣!當然,這是一個基本的方法,並且由於您正在考慮製作可重複使用的引擎,因此您應該查看GameComponent課程。在XNA中,您可以製作可在不同遊戲項目中重複使用的組件。

希望這會有所幫助!

+0

不幸的是,我沒有使用XNA,因爲它不是跨平臺的。我試圖弄清楚的是如何在沒有現有遊戲庫(如XNA)的情況下進行計時和輸入。 – 2011-12-29 23:37:25

+0

哎呀!一定會誤解這個問題。 – slezakattack 2011-12-30 04:37:27