2016-05-19 3 views
0

Итак, у меня есть два мувиклипа: mcMain, который является моим персонажем, который стоит справа, и у меня есть mcMainLeft, который является моим персонажем, который стоит слева. Я попытался реализовать код, чтобы при нажатии левой стрелки mcMainLeft был виден и перемещается влево. То же самое для mcMain и справа. Так что в итоге происходит то, что когда я двигаюсь влево, он перемещается влево, а символ стоит слева, но затем я нажимаю стрелку вправо и перемещаю его вправо, и он не будет перемещать мой текущий символ в текущем местоположении, начните с другой позиции. Я не уверен, что это за сделка.AS3 Как сделать направление лица спрайта движется

Вот мой код:

//These variables will note which keys are down 
var leftKeyDown:Boolean = false; 
var upKeyDown:Boolean = false; 
var rightKeyDown:Boolean = false; 
var downKeyDown:Boolean = false; 
//the main character's speed 
var mainSpeed:Number = 7; 
//whether or not the main guy is jumping 
var mainJumping:Boolean = false; 
//how quickly should the jump start off 
var jumpSpeedLimit:int = 15; 
//the current speed of the jump; 
var jumpSpeed:Number = 0; 

//set coordinates of pacman left and right 
mcMain.x = 270; 
mcMain.y = 370; 
mcMainLeft.x = 270; 
mcMainLeft.y = 370; 

//make pacman left invisible on startup 
mcMainLeft.visible = false; 

//move character function 
mcMain.addEventListener(Event.ENTER_FRAME, moveChar); 
mcMainLeft.addEventListener(Event.ENTER_FRAME, moveChar); 
function moveChar(event:Event):void{ 
    //if certain keys are down, then move the character 
    if(leftKeyDown){ 
     mcMainLeft.x -= mainSpeed; 
    } 
    if(rightKeyDown){ 
     mcMain.x += mainSpeed; 
    } 
    if(upKeyDown || mainJumping){ 
     mainJump(); 
    } 
} 

//listening for the keystrokes 
//this listener will listen for down keystrokes 
stage.addEventListener(KeyboardEvent.KEY_DOWN, checkKeysDown); 
function checkKeysDown(event:KeyboardEvent):void{ 
    //making the booleans true based on the keycode 
    //WASD Keys or arrow keys 
    if(event.keyCode == 37 || event.keyCode == 65){ 
     leftKeyDown = true; 
     mcMain.visible = false; 
     mcMainLeft.visible = true; 
    } 
    if(event.keyCode == 38 || event.keyCode == 87){ 
     upKeyDown = true; 
    } 
    if(event.keyCode == 39 || event.keyCode == 68){ 
     rightKeyDown = true; 
     mcMain.visible = true; 
     mcMainLeft.visible = false; 
    } 
    if(event.keyCode == 40 || event.keyCode == 83){ 
     downKeyDown = true; 
    } 
} 
//this listener will listen for keys being released 
stage.addEventListener(KeyboardEvent.KEY_UP, checkKeysUp); 
function checkKeysUp(event:KeyboardEvent):void{ 
    //making the booleans false based on the keycode 
    if(event.keyCode == 37 || event.keyCode == 65){ 
     leftKeyDown = false; 
    } 
    if(event.keyCode == 38 || event.keyCode == 87){ 
     upKeyDown = false; 
    } 
    if(event.keyCode == 39 || event.keyCode == 68){ 
     rightKeyDown = false; 
    } 
    if(event.keyCode == 40 || event.keyCode == 83){ 
     downKeyDown = false; 
    } 
} 

//jumping function 
function mainJump():void{ 
    //if main isn't already jumping 
    if(!mainJumping){ 
     //then start jumping 
     mainJumping = true; 
     jumpSpeed = jumpSpeedLimit*-1; 
     mcMain.y += jumpSpeed; 
     mcMainLeft.y += jumpSpeed; 
    } else { 
     //then continue jumping if already in the air 
     if(jumpSpeed < 0){ 
      jumpSpeed *= 1 - jumpSpeedLimit/75; 
      if(jumpSpeed > -jumpSpeedLimit/5){ 
       jumpSpeed *= -1; 
      } 
     } 
     if(jumpSpeed > 0 && jumpSpeed <= jumpSpeedLimit){ 
      jumpSpeed *= 1 + jumpSpeedLimit/50; 
     } 
     mcMain.y += jumpSpeed; 
     mcMainLeft.y += jumpSpeed; 
     //if main hits the floor, then stop jumping 
     //of course, we'll change this once we create the level 
     if(mcMain.y || mcMainLeft.y >= stage.stageHeight - mcMain.height || mcMainLeft.height){ 
      mainJumping = false; 
      mcMain.y = stage.stageHeight - mcMain.height; 
      mcMainLeft.y = stage.stageHeight - mcMainLeft.height; 
     } 
    } 
} 

ответ

2

Это потому, что у вас есть в основном два объекта характера (mcMain и mcMainLeft), но всегда только перемещение одного из них. Другой невидимый и остается в исходном положении.

Сделайте MovieClip с двумя кадрами, каждый из которых содержит mcMain и mcMainLeft. Поместите стоп() в первый кадр, чтобы мувиклип не зациклился сам по себе. Затем используйте этот комбинированный мувиклип в качестве персонажа:

function moveChar(event:Event):void{ 
    //if certain keys are down, then move the character 
    if(leftKeyDown){ 
     myNewCharacter.x -= mainSpeed; 
    } 
    if(rightKeyDown){ 
     myNewCharacter.x += mainSpeed; 
    } 
    if(upKeyDown || mainJumping){ 
     mainJump(); 
    } 
} 

И вместо переключения видимости перехода к правильной рамке вашего нового мувика для отображения вашего персонажа смотрящий влево или вправо:

myNewCharacter.gotoAndStop(2); // or 1 
+0

Большое вам спасибо за помощь! Это сработало! –

0
mcMain.scaleX = -1; // will face left 

и

mcMain.scaleX = 1; // will face right 

, то вы можете использовать значение .scaleX как ваш переменная в логических блоках кода.

Смежные вопросы