PDA

Просмотр полной версии : Проблема с движением обьекта.


aaaa51993
07.10.2012, 18:35
Добрый день,господа!У меня проблема с функциями,а конкретно с функцией смещения персонажа по оси x при нажатии кнопки.Дело в том,что после нажатия кнопки и ,непосредственно,смещением имеет место некоторая пауза,около секунды или 2х. Так-же,само движение осуществляется так-сказать рывками,заметны они плохо,но все же не приятны.Вот код из исходника
//Функция ходьбы влево
function GoLeft() {
this.HERO1._x -= 4;
this.HERO1.legs.gotoAndPlay(2);
}
//Функция ходьбы вправо
function GoRight() {
this.HERO1._x += 4;
this.HERO1.legs.gotoAndPlay(2);
}
//Слушатель нажатия кнопки и вызов функции
this.onKeyDown = thisKeyDown;
Key.addListener(this);
function thisKeyDown(){
if (Key.isDown(65)) {
GoLeft();
} else if (Key.isDown(68)) {
GoRight();
}
}
Выкладываю исходник и надеюсь на вашу помощь.Заранее спасибо.

mooncar
07.10.2012, 19:11
Понятная задержка - отрабатывается первое нажатие, т.е. реакция на событие onKeyDown, персонаж делает шажок. Затем через небольшое время при нажатой и не отпущенной клавише опять срабатывает onKeyDown, и при дальнейшем опросе клавиатуры оно срабатывает непрерывно.
У вас в корне неверный подход к управлению движением. Непрерывное движение нужно организовывать не на основе onKeyDown, а, например, по onEnterFrame или setInterval, т.е. средстваи, дающими непрерывное выполнение.
Останавливать движение по событию onKeyUp.
Иными словами, при правильном подходе событие onKeyDown только запускает движение (но не служит его "двигателем"), а onKeyUp - останавливает.

aaaa51993
07.10.2012, 19:36
А не могли бы вы написать,как правильно?

mooncar
07.10.2012, 19:40
Писать, к сожалению, нет времени, а вот статья Простой платформенный движок (http://xitri.com/2009/06/16/simple-platform-flash-game-engine.html) на Хитри вам должна помочь.
Обратите там внимание на обработчик onEnterFrame, по нему непрерывно вызывается функция stepHero() - то, о чем я и писал.

aaaa51993
07.10.2012, 19:42
Я её читал,но видимо,не внимательно.Спасибо!