xNiSSaNx
15-10-2012, 00:21
Как я понял, в XNA нету обработчика события нажатия клавиши, а задача в том чтобы заданый код выполнялся один раз при нажатии клавиши.
Например если так
if (Keyboard.GetState().IsKeyDown(Keys.L) && !click_l)
i++;
То переменная i увеличится не на +1, а примерно на время залипания клавиши в милисекундах, но как правильным путем добиться нужного результата?
Если
bool click = false; /// Вне метода
/////////////////////////
if (Keyboard.GetState().IsKeyDown(Keys.L) && !click)
{
click = true;
////Код который нужно выполнить, например i++;
}
if (Keyboard.GetState().IsKeyUp(Keys.L)) click = false;
Здесь все работает, а именно при нажатии клавиши i увеличится всего лишь на +1, и так при "едином" надатии.
Но меня волнует то, что в таком случае будет много лишнего кода, и для каждой кнопки делать так будет неправильно. Попытка засунуть этот код в метод не дала результата, так как опять же для коректной работы нужно было для каждого вызова метода объявлять переменную которая отвечала за нажатие. Даже создание отдельного класса и написании переменной как член класса не дало результата.
Например если так
if (Keyboard.GetState().IsKeyDown(Keys.L) && !click_l)
i++;
То переменная i увеличится не на +1, а примерно на время залипания клавиши в милисекундах, но как правильным путем добиться нужного результата?
Если
bool click = false; /// Вне метода
/////////////////////////
if (Keyboard.GetState().IsKeyDown(Keys.L) && !click)
{
click = true;
////Код который нужно выполнить, например i++;
}
if (Keyboard.GetState().IsKeyUp(Keys.L)) click = false;
Здесь все работает, а именно при нажатии клавиши i увеличится всего лишь на +1, и так при "едином" надатии.
Но меня волнует то, что в таком случае будет много лишнего кода, и для каждой кнопки делать так будет неправильно. Попытка засунуть этот код в метод не дала результата, так как опять же для коректной работы нужно было для каждого вызова метода объявлять переменную которая отвечала за нажатие. Даже создание отдельного класса и написании переменной как член класса не дало результата.