ActionScript MovieClip перемещается влево, но не вправо - PullRequest
0 голосов
/ 22 апреля 2010

У меня есть сцена с фрагментом ролика с именем экземпляра "mc". В настоящее время у меня есть код, который должен перемещать плеер влево и вправо, и когда левая или правая клавиша отпущена, «mc» немного скользит. У меня проблема в том, что перемещение «mc» влево работает, но точный код, используемый справа, не работает.

Весь этот код присутствует на главной сцене - первый кадр

//Variables

var mcSpeed:Number = 0;//MC's Current Speed
var mcJumping:Boolean = false;//if mc is Jumping
var mcFalling:Boolean = false;//if mc is Falling
var mcMoving:Boolean = false;//if mc is Moving
var mcSliding:Boolean = false;//if mc is sliding
var mcSlide:Number = 0;//Stored for use when creating slide
var mcMaxSlide:Number = 1.6;//Max Distance the object will slide.

//Player Move Function
p1Move = new Object();
p1Move = function (dir:String, maxSpeed:Number) {
 if (dir == "left" && _root.mcSpeed<maxSpeed) {
  _root.mcSpeed += .2;
  _root.mc._x -= _root.mcSpeed;
 } else if (dir == "right" && _root.mcSpeed<maxSpeed) {
  _root.mcSpeed += .2;
  _root.mc._x += _root.mcSpeed;
 } else if (dir == "left" && speed>=maxSpeed) {
  _root.mc._x -= _root.mcSpeed;
 } else if (dir == "right" && _root.mcSpeed>=maxSpeed) {
  _root.mc._x += _root.mcSpeed;
 }
}

//onEnterFrame for MC
mc.onEnterFrame = function():Void  {
 if (Key.isDown(Key.LEFT)) {
  if (_root.mcMoving == false && _root.mcSliding == false) {
   _root.mcMoving = true;
  } else if (_root.mcMoving == true && _root.mcSliding == false) {
   _root.p1Move("left",5);
  }
 } else if (!Key.isDown(Key.LEFT)) {
  if (_root.mcMoving == true && _root.mcSliding == false) {
   _root.mcSliding = true;
  } else if (_root.mcMoving == true && _root.mcSliding == true && _root.mcSlide<_root.mcMaxSlide) {
   _root.mcSlide += .2;
   this._x -= .2;
  } else if (_root.mcMoving == true && _root.mcSliding == true && _root.mcSlide>=_root.mcMaxSlide) {
   _root.mcMoving = false;
   _root.mcSliding = false;
   _root.mcSlide = 0;
   _root.mcSpeed = 0;
  }
 } else if (Key.isDown(Key.RIGHT)) {
  if (_root.mcMoving == false && _root.mcSliding == false) {
   _root.mcMoving = true;
  } else if (_root.mcMoving == true && _root.mcSliding == false) {
   _root.p1Move("right",5);
  }
 } else if (!Key.isDown(Key.RIGHT)) {
  if (_root.mcMoving == true && _root.mcSliding == false) {
   _root.mcSliding = true;
  } else if (_root.mcMoving == true && _root.mcSliding == true && _root.mcSlide<_root.mcMaxSpeed) {
   _root.mcSlide += .2;
   this._x += .2;
  } else if (_root.mcMoving == true && _root.mcSliding == true && _root.mcSlide>=_root.mcMax) {
   _root.mcMoving = false;
   _root.mcSliding = false;
   _root.mcSlide = 0;
   _root.mcSpeed = 0;
  }
 }
};

Я просто не понимаю, почему, когда вы нажимаете стрелку влево, она работает совершенно нормально, но когда вы нажимаете стрелку вправо, она не реагирует. Это буквально тот же код.

1 Ответ

0 голосов
/ 22 апреля 2010

вы никогда не читаете его из-за кода вашего цикла:

if(keyleft){
    //catches all keyleft
}
else if(!keyleft){
    //katches all non key left
}
else if(keyright){
    //Never called because all eventualities have been covered by the above.
}

используйте if(keyright) вместо else if, и оно должно работать.

...