Стрелка ввода против фокуса на объектах - PullRequest
0 голосов
/ 24 апреля 2020

Я сейчас программирую свой собственный тетрис в 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...