|
|
|||||
Регистрация: Aug 2014
Сообщений: 1
|
Не отслеживает зажатые клавиши
Всем привет, возникла такая вот проблема, хоть убей, не пойму что не так: если зажать одну клавишу, и через какое-то время нажать вторую, первая перестает работать, и вообще не отслеживается. Например, нужно создать персонажа, который двигается стрелочками влево-вправо, прыгает, и при нажатии стрелки и прыжка прыгать в сторону. Если нажать строго одновременно, то все работает, но если, например, зажать стрелку, а потом нажать прыжок, персонаж тупо останавливается, и больше не реагирует на стрелку, только на кнопку прыжка. А для того, чтобы он снова пошел в сторону, нужно отпустить стрелку, и нажать ее заново, что не очень удобно. Перепробовал все что только приходило в голову, в интернете ответа не нашел, узнал только что это может быть из-за плохой клавиатуры, но я сомневаюсь. Реализовано все самым простым и очевидным способом, через KeyUp, KeyDown и enterFrame.
Сам код: import flash.events.Event; var gravity:int = 20; var left:Boolean = false; var right:Boolean = false; var jump:Boolean = false; var count:Number = 0; var speedX:int = 10; var speedY:int = 100; stage.addEventListener(KeyboardEvent.KEY_DOWN, kd); stage.addEventListener(KeyboardEvent.KEY_UP, ku); stage.addEventListener(Event.ENTER_FRAME, ef); function ef(e:Event):void{ hero.y += gravity; if(hero.y >= 300){ hero.y = 300;} if(left){ hero.x -= speedX; hero.scaleX = +0.5; hero.play(); } if(right){ hero.x += speedX; hero.scaleX = -0.5; hero.play(); } if(jump && left){ hero.x -= speedX; hero.y += speedY; } if(jump && right){ hero.x += speedX; hero.y += speedY; } if(jump){ hero.y = speedY; stage.removeEventListener(KeyboardEvent.KEY_DOWN, kd); } if(count >= 1){ jump = false; } } function kd(e:KeyboardEvent){ trace(e.keyCode) if(e.keyCode == 32){ } if(e.keyCode == 37){ left = true; } if(e.keyCode == 39){ right = true; } if(e.keyCode == 32){ jump = true; } } function ku(e:KeyboardEvent){ hero.gotoAndStop(1); left = false; right = false; jump = false; count = 0; stage.addEventListener(KeyboardEvent.KEY_DOWN, kd); } |
|
|||||
Регистрация: Jun 2013
Сообщений: 133
|
У вас при любом срабатывание события - KeyboardEvent.KEY_UP, происходит сброс всех ключей:
из-за этого и происходит такой "эффект". |
|
|||||
Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
|
да у меня такое же было. Кодил кодил а потом оказалось что при отбрасывании в одном месте сбрасывалось все.
|
|
|||||
Регистрация: Apr 2014
Сообщений: 215
|
Цитата:
Не знаю как у вас одновременно работают несколько клавиш,скорей всего Flash надрывается и думает что вы все таки жмете, например я делал как вы раньше, но потом сделал такой опыт, например ставишь квадрат на сцену и видишь что это на самом деле не одновременное нажатие, особенно если частоту кадров уменьшить лучше в духе таком if(e.keyCode == Keyboard.UP) { moveUp = true; } if(e.keyCode == Keyboard.RIGHT) { moveRight = true; } также мой вам совет,да и все так скажут, названия понятливые давать а не ku и т.д даже если вы это делаете в качестве теста, а тем более если рабочий проект со временем будет непонятен код, что за ku. Хотя мне тоже бывает лень писать название))).Я надеюсь это то что вам нужно, по крайней мере у меня работает эта система исправно. |
Часовой пояс GMT +4, время: 01:00. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|