Показать сообщение отдельно
Старый 20.05.2013, 23:01
Idon'tKnow вне форума Посмотреть профиль Отправить личное сообщение для Idon'tKnow Найти все сообщения от Idon'tKnow
  № 10  
Ответить с цитированием
Idon'tKnow

Регистрация: Apr 2013
Сообщений: 77
Ну суть бага в том, что у Вас в приемнике Фрэйма стоит порядок движения, т.е если у Вас нажата кнопочка, которая раньше зарегистрирована, то это движение из двух, трех, четырех он выберет.

Т.е. Если нажата Вверх и вниз - пойдет вверх, влево и вниз - пойдет влево.
Т.е приоритеты :
1. up
2. left
3. down
4. right

Приоритет определяет направление, чем ниже он - туда и будет двигаться. А почему происходит поворот? Потому что рассылка события заходит в приемник keyPressedListener и делает поворот.

Исправить этот баг - просто, просто нужно обнулять переменные ненужных нам направлений в приемнике:

Код AS3:
private function keyPressedListener(e:KeyboardEvent){
			var key:uint=e.keyCode;
			if(key==87||key==38){//W or UP key
				this.gotoAndPlay("goUp");
				moveUp = true;
				moveRight=false;
				moveDown = false;
				moveLeft=false;
			}else if(key==65||key==37){//A or LEFT key
				this.gotoAndPlay("goLeft");
				moveLeft = true;
				moveUp = false;
				moveRight=false;
				moveDown=false;
			}else if(key==83||key==40){//S or DOWN key
				this.gotoAndPlay("goDown");
				moveDown = true;
				moveUp = false;
				moveRight=false;
				moveLeft=false;
				return;
			}else if(key==68||key==39){//D or RIGHT
				this.gotoAndPlay("goRight");
				moveRight = true;
				moveUp = false;
				moveDown=false;
				moveLeft=false;
			}
 
		}
Если же Вы хотите, чтобы после отпускания одной из двух клавиш Ваш персонаж продолжал движение, то Вам придется завести что-то типа переменной приоритета и менять при получении события, т.е где я менял значения переменных, там обновлять этот приоритет при получении событий, а в приемнике фрейма отталкиваться от значений :
1. Нажата ли кнопочка?
2. Если нажата, то проверять приоритет.