2016-11-14 4 views
1

я кодирование меню и использовать keyState[SDL_SCANCODE_KEY] для обнаружения при нажатии клавиши в цикле, как это:Сделать KeyState огня только огнь, как только

if (Button1 && keyState[SDL_SCANCODE_DOWN]) 
{ 
    Button1 = false; 
    Button2 = true; 
} 
else if (Button2 && keyState[SDL_SCANCODE_DOWN]) 
{ 
    Button2 = false; 
    Button3 = true; 
} 
else if (button3 && keyState[SDL_SCANCODE_DOWN]) 
{ 
    //and so on 
} 

Проблема с этой установкой, однако, что, когда пользователь нажимает нажатие клавиши keystate срабатывает несколько раз, сохраняя условия, при которых кнопка 2 переключается на кнопку 3, и так далее. Итак, как мне сделать огонь keystate только один раз или, по крайней мере, решить эту проблему? Благодарю.

+0

Я считаю, что это связано с прошивкой, и вы получаете ключи от клавиатуры. правильно? – Sean83

+0

@ Sean83 да, я получаю ключи от клавиатуры. –

+0

@StackOverflow неясно, чего вы хотите достичь. Если вы хотите, чтобы пользователь отпустил кнопку, прежде чем снова реагировать на нее, вы, вероятно, захотите использовать события keydown/keyup вместо keystate (имейте в виду, что ключевое событие повторяется, но у него есть флаг bool, чтобы выяснить, является ли он реальным или повторяется). – keltar

ответ

0

Это происходит потому, что ваша система (CPU) работает слишком быстро. Чтобы избежать этого, вы можете использовать таймер или задержку.

Чтобы просто решить, вы можете использовать задержку. В конце концов, попробуйте

delay(1000); // which means delay 1000 clock cycles. 

Вы можете регулировать длину, изменяя число (т.е. 1000), но следует помнить о том, что с помощью функции задержки может иметь решающее значение в сложной системе. В этой системе Таймер может использоваться, но более сложный для реализации, чем этот.

+0

Я отметил это как ответ, хотя с помощью этого метода наблюдается заметное входное отставание. Спасибо хоть. –

+0

Добавлены комментарии. Поскольку я не знаю, в какой системе вы работаете точно, поэтому я не могу дать вам прямой ответ на таймер. – Sean83

+0

спасибо, что помогает :) –

Смежные вопросы