2015-09-07 76 views
-2

我正在用C#開發一款遊戲,並且陷入困境。所以背景一直在移動,這是通過一個定時器循環完成的,以確保背景一致移動。現在,我需要檢查用戶是否按空格鍵來移動播放器。我如何檢查是否有keydown事件?我不能使用KeyDown事件子,因爲遊戲循環一直在工作,所以KeyDown事件子將不起作用。只是在這裏尋找一些方向。謝謝!C#遊戲循環中的KeyDown事件

+0

'tmrTick'上的'Interval'設置爲?... –

+0

間隔設置爲100 ms – user3587182

回答

1

在你的Tick事件,您可以檢查你沒有提供的任何代碼

if (Keyboard.IsKeyDown(Key.Space)) 
{ 
    ... Do stuff 
} 
+0

「keyboard」關鍵字不起作用! – user3587182

+0

嘗試使用大寫的K?你正在使用哪個.Net框架版本,這應該從3.0版本開始提供。 –

+0

不要那樣。目標.NET框架是4.5.2 – user3587182

0

只是猜測。

嘗試在每個循環中調用Application.DoEvents();,並按照您的意願使用KeyDown

編輯:

OK,這意味着您不使用遊戲圈,但你有事件驅動的應用程序(通常的Windows應用程序)。撥打Application.DoEvents()可讓窗口處理常規遊戲循環中的所有回調(不是您的情況)。

我已經更新代碼再次展示它是如何工作 - 我相信,通過實例學習好,但首先,你必須學會​​的基本知識(抱歉,但本場比賽是學習C#的太複雜了)...

private bool isKeyUpPressed; 
private void tmrTick_Tick(object sender, EventArgs e) { 
    if (isKeyUpPressed) 
    { 
     // move player up 
    } 
} 
private void Form1_KeyDown(object sender, KeyEventArgs b) { 
    isKeyUpPressed = b.KeyCode == Keys.Up; 
} 
+0

私人無效tmrTick_Tick(對象發件人,EventArgs的) { // backgroung移動... } 私人無效Form1_KeyDown(對象發件人,KeyEventArgs b) { //移動玩家最多 } 的Application.DoEvents();不會產生任何結果。代碼沒有任何錯誤,但沒有給出結果 – user3587182

+0

IsKeyPressed會是什麼樣的變量? – user3587182

+0

當然是'bool'(通過分配比較值的結果來表示)。它將(很可能)是定義事件的同一班級的成員。 – Zoka