Я делаю игру, и у меня есть класс MainCharacter, который сначала инициализирует главного персонажа (в pictureBox), а затем у меня было событие KeyDown для обработки движения.Внутри этого события я мог управлять движением персонажа, если нажимал клавиши со стрелками, и я даже сделал анимацию движения на основе таймера, чтобы сделать его более плавным.
Однако проблема с событием KeyDown заключается в том, что оно срабатывает каждый раз, когда я нажимаю клавишу. Это означает, что если я удерживаю клавишу со стрелкой, чтобы персонаж продолжал двигаться в одном направлении, событие вызываетсянеоднократно, что означает, что персонаж бегает по экрану как торпеда, потому что событие запускается так быстро, как компьютер может с этим справиться.
Вот почему я решил использовать событие KeyPress, чтобы, когда я удерживал клавишувниз персонаж будет двигаться в указанном направлении с постоянной скоростью.Однако событие KeyPress не может обрабатывать клавиши со стрелками, поэтому мне пришлось переопределить метод ProcessDialogKey в основной форме.Но если я переопределю его в основной форме, то событие будет срабатывать каждый раз, когда я нажимаю клавишу со стрелкой, даже когда я не в игре, но, например, в главном меню или где-либо еще.Кроме того, я думаю, что это было бы плохой практикой, если бы я все равно пытался так много программировать, пересекая классы.
Итак, есть ли другой способ обработать событие KeyPress для стрелок внутри мой класс MainCharacter без влияния на другие классы?Или у меня есть шанс остаться с событием KeyDown, которое у меня уже было, и сделать так, чтобы оно не могло запускаться повторно, если я удерживаю клавишу?Помните, что я хочу достичь, чтобы мой персонаж свободно двигался, когда я держу нажатой клавишу.Пока все работает нормально, если я нажимаю его только один раз, но обычно люди удерживают клавиши, когда они идут в одном направлении.