0

我创建了一个名为stickman 的movieclip。在那,我通过在每一帧中绘制一系列移动来创建动画,以便火柴人可以运行。现在我想要的是,当我按下一个键时,火柴人会从左向右跑,当我松开键时,它会停止。这是我的代码:

RunningMan.stop();

stage.addEventListener(KeyboardEvent.KEY_DOWN,keypresseddown);
function keypresseddown(event:KeyboardEvent):void
{

var key:uint = event.keyCode;
switch (key) {
   case Keyboard.LEFT :
   {
       RunningMan.play();
       RunningMan.x-=10;
       RunningMan.scaleX=-1;
       if(RunningMan.x<=0)
       {
           RunningMan.x=0;
       }
   };
    case Keyboard.RIGHT :
    {
        RunningMan.play();  //play animated run 
        RunningMan.x+=10;
        RunningMan.scaleX=1;
        if(RunningMan.x>=stage.width)
        {
            RunningMan.x=stage.width;
        }
    };
    default: RunningMan.stop();
   }
}

但是,当我按住一个键时,它从左向右移动而没有动画运行。

我该如何解决?提前致谢。

编辑: 我有一个名为的影片剪辑,character其中包含 3 个分别名为:和的影片剪辑。当我按下向上箭头键时,它会跳跃,但如果我立即松开键,它不会跳得很高,因为跳跃动画剪辑无法完成它的帧。这是代码:standingrunningjumping

      if (key.isDown(Keyboard.LEFT))
            {

                gotoAndStop("running");
                BGround.x+=speed;
                scaleX=-1;
                if(BGround.x>=stage.stageWidth)
                    BGround.x=stage.stageWidth;
            }
            else if (key.isDown(Keyboard.RIGHT))
            {

                gotoAndStop("running");
                BGround.x -= speed;
                scaleX=1;

            }
            else
            if (key.isDown(Keyboard.UP))
            {
                gotoAndStop("jumping");

            }
            else
            gotoAndStop("standing");

我该如何解决?

4

1 回答 1

1

首先,我希望 RunningMan 是类的一个实例,而不是类本身。如果它是一个实例,那么当您与他人共享代码时(就像您现在所做的那样),您应该真正遵循通用的命名约定,这样它就会是 runningMan。

因此,第一,将 runnigMan 时间线的第一帧制作成静止不动的人的照片,并将其命名为“静止”或其他名称。然后将第二个“运行”命名为 20 帧或动画长度。在最后一帧,您将不得不使用时间线代码。仅一行 gotoAndPlay("running") 将导致那些 2 到 20(或其他)的帧循环。当您告诉时间线从时间线代码外部转到第 1 帧时,它不会再循环,而是会停留在静止不动的人的帧上。因此,当您希望循环开始时,从外部:

runningMan.gotoAndPlay("running"); // frame 2

停止:

runningMan.gotoAndStop("still"); // frame 1

或者您可以从 RunningMan 类中执行此操作

public function startRunAnimation():void{
  this.gotoAndPlay("running");
}
public function stopRunAnimation():void{
  this.gotoAndStop("still");
}

如果您的代码 ex( 而不是 play() 它将是 startRunAnimation() ),您只需将这些函数名称替换为您拥有的函数名称即可使用它们

编辑

你可以为这个问题做的是有一个布尔变量,当你的角色在空中时(在你的代码中你与地面进行碰撞检测或你处理重力的地方 - 不管它是如何设置的),这样这部分你的代码知道你的角色何时在空中。然后你可以用你需要的方式简单地测试它。...

        if (key.isDown(Keyboard.UP) || this.inAir==true)
        {
            gotoAndStop("jumping");

        }
        else
        gotoAndStop("standing");

尽管如果您的角色没有继承具有重力、摩擦力等的可碰撞对象......那么您将不得不将任何其他类的 inAir 属性设为 public 或为它创建 getter 函数 - 以便您可以在此处访问它。我希望这有帮助。

于 2013-10-31T02:42:57.487 回答