Я сейчас программирую свой собственный тетрис в C#, и ввод с помощью W, A, S, D работает. Моя проблема в том, что я не могу использовать клавиши со стрелками из-за фокусировки на объектах (я имею в виду синюю подсветку на текущем объекте). У меня есть кнопка, чтобы завершить игру в любое время, и поэтому она не будет регистрировать мои входные данные как элементы управления текущего блока Tetris, а как навигацию по включенным объектам, таким как эта кнопка.
На всякий случай Я сделал что-то не так с чтением ввода:
bool bl = checkCollision();
if (!bl && !blocked)
{
if (e.KeyCode == Keys.W || e.KeyCode == Keys.Up)
{
//turning the block
}
if (e.KeyCode == Keys.S || e.KeyCode == Keys.Down)
{
//speeding up the falling
}
if (e.KeyCode == Keys.A || e.KeyCode == Keys.Left)
{
direction = 'l';
if (currentY > 0)
{
if (!blocked)
{
inpt = true;
currentY -= 1;
falling();
}
}
}
if (e.KeyCode == Keys.D || e.KeyCode == Keys.Right)
{
direction = 'r';
if ((currentY + currentBlock.getSize()) < 10)
{
if (!blocked)
{
inpt = true;
currentY += 1;
falling();
}
}
}
}
Если вы задаетесь вопросом, почему я проверяю 2 раза, если значение false заблокировано (значение true заблокировано, если в настоящее время активен метод падения, поэтому он, например, не будет двигаться одновременно вниз и влево).
Есть ли способ отключить фокусировку, пока кто-нибудь играет в игру? (Поэтому я просто отключил бы фокус, когда кто-то нажимает «play», и включал бы его снова, если кто-то нажимал «stop» или проигрывал игру.
Заранее благодарен за вашу помощь!
Редактировать: мой Программа Windows Forms-App (. Net Framework)