2015-09-07 4 views
-2

Я работаю над игрой на C# и застрял. Таким образом, фон постоянно перемещается, и это делается в цикле с таймером, чтобы гарантировать, что фон перемещается последовательно. Теперь мне нужно проверить, нажал ли пользователь пробел, чтобы переместить плеер. Как проверить, есть ли событие keydown? Я не могу использовать событие события KeyDown, потому что игровой цикл постоянно работает, поэтому суб-событие KeyDown не работает. Просто ищите здесь какое-то направление. Благодаря!C# KeyDown Event in Game loop

+0

Что такое 'Интервал' на' tmrTick' установлен?? –

+0

Интервал установлен на 100 мс. – user3587182

ответ

1

В вашем случае клеща вы можете проверить

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

Ключевое слово "keyboard" не работает! – user3587182

+0

Попробуйте капитализировать K? Какую версию .NET Framework вы используете, она должна быть доступна начиная с версии 3.0. –

+0

Нет удачи с этим. Целевая платформа .NET Framework 4.5.2 – user3587182

0

Просто угадать, как вы не предоставил код.

Попробуйте позвонить Application.DoEvents(); в любой цикл и используйте KeyDown, как вы планируете.

EDIT:

КИ, это означает, что вы не используете игровой цикл, но у вас есть событие, приводимое приложение (обычно приложение выигрыша). Звонок на 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 е) { // движущемся фоновой ... } частная пустота Form1_KeyDown (объект отправителя, KeyEventArgs б) { // Переместить игрока вверх } The Application.DoEvents(); не дает никакого результата. Код работает без ошибок, но не дает результата – user3587182

+0

Какая переменная будет IsKeyPressed? – user3587182

+0

'bool', конечно (указывается присвоением результата сравнения). Он будет (скорее всего) членом того же класса, где определены события. – Zoka