![]() |
|
||||||||||
|
|||||
|
Регистрация: May 2013
Сообщений: 8
|
Цитата:
Цитата:
Цитата:
![]() Цитата:
движения по диагонали мне не надо. Я пробовала сперва "поворачивать" его именно в frameListener, но там анимация не проигрывается вообще. Хотя пспрайт двигается без этих лишних поворотов... Как из этой позиции в таком случае заставить играть анимацию?Idon'tKnow, ваш код тоже убрал тот баг, но главной проблемы не решил - анимация все равно проигрывается один раз и все. Плюс когда клавиша отпущена, анимация движения в эту сторону как раз начинает проигрываться. Чяднт :С |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Давайте кое-что проясним.
Вот внизу окошко, в котором Вы пишете сообщения. Поставьте туда курсор и нажмите любую клавишу с буквой на клавиатуре. Не отпускайте. Что Вы видите? Событие "нажали клавишу ..." отправляется постоянно, пока нажата клавиша, с определенным интервалом. Соответственно Ваш обработчик нажатия точно так же выполняется с определенным интервалом снова и снова, пока клавиша удерживается нажатой. Не один раз при нажатии, а постоянно. Вы постоянно отправляете своего героя на начальный кадр анимации. А "проигрывается один раз" видимо лишь потому, что между первым событием при нажатии и началом серии пауза чуть больше, чем интервал самой серии (клавиатура выжидает, иначе мы бы замаялись стирать двойные-тройные буквы), и за эту паузу Ваш герой успевает сделать пару шагов))), после чего возвращается к первому кадру чаще, чем происходит переход на следующий кадр. По этой же причине Цитата:
Добавлено через 16 минут Можно попробовать сделать так: завести две переменных, хранящих текущее состояние героя: Boolean идёт/стоит, и String или uint, хранящий направление. При получении события "клавиша ... нажата" проверяете первым делом, стоит герой или идет. Соответственно две ветки условий — если стоит, то надо начать идти в заданном клавишей направлении, и записать в флаги значение true ("шагает") и это направление. А если уже идет, то надо проверить, в том ли направлении он идет, и если в том, то ничего делать не надо, а нет — значит переходим на другой ключевой кадр и записываем в нашу переменную направления это Новое направление. При отпускании клавиши соответственно переходим на начальный кадр текущего направления и стоп. И записываем в "шагает/стоит" false. И этими же флагами пользуемся в обработчике ентерфрейма — если стоит, ничего не делаем; если идет, то меняем координату в соответствии с направлением. Добавлено через 54 минуты package AS { import flash.display.MovieClip; import flash.events.KeyboardEvent; import flash.events.Event; public class Hero extends MovieClip { private var moveSpeed:uint; // добавил свои флаги private var isMove:Boolean = false; private var direct:String = "goUp"; public function Hero() { moveSpeed=4; Constants.stageRef.addEventListener(KeyboardEvent.KEY_DOWN, keyPressedListener); Constants.stageRef.addEventListener(KeyboardEvent.KEY_UP, keyReleasedListener); Constants.stageRef.addEventListener(Event.ENTER_FRAME, frameListener); } private function keyPressedListener(e:KeyboardEvent){ var key:uint=e.keyCode; var command:String; if(key==87||key==38){//W or UP key command = "goUp"; } if(key==65||key==37){//A or LEFT key command = "goLeft"; } if(key==83||key==40){//S or DOWN key command = "goDown" } if(key==68||key==39){//D or RIGHT command = "goRight"; } if(isMove) { // если герой уже идет if(direct != command) { // если новое направление отличается this.gotoAndPlay(command); } } else { // если герой стоит this.gotoAndPlay(command); } isMove = true; direct = command; } private function keyReleasedListener(e:KeyboardEvent){ this.gotoAndStop(direct); isMove = false; } private function frameListener(e:Event){ if(isMove){ if(direct == "goUp"){ this.y -= moveSpeed; } if(direct == "goDown"){ this.y += moveSpeed; } if(direct == "goRight"){ this.x += moveSpeed; } if(direct == "goLeft"){ this.x -= moveSpeed; } } } } }
__________________
Reality.getBounds(this); Последний раз редактировалось Wolsh; 21.05.2013 в 01:20. |
|
|||||
|
Регистрация: May 2013
Сообщений: 8
|
Wolsh, УРА все заработало! Правда, огромное спасибо, удивляюсь, как вам не влом было писать такой здоровый подробный ответ новичку, это очень приятно
![]() |
|
|||||
|
[+1 22.04.13]
[+1 06.03.13] Регистрация: Apr 2012
Сообщений: 239
|
абсолютно всё сделано не павильно
|
![]() |
![]() |
Часовой пояс GMT +4, время: 19:04. |
|
|
« Предыдущая тема | Следующая тема » |
|
|