【问题标题】:Walking animation while moving in as3在as3中移动时的行走动画
【发布时间】:2012-03-08 10:22:20
【问题描述】:

好的,所以我有一个电影剪辑实例为“男人”,我制作了他,这样他就有了这样的空闲和行走帧。他也可以向左/向右移动。 (我也让他攻击,但这无关紧要);

[空闲][行走[] 最后一帧有

gotoAndPlay("walk");

我需要它循环遍历“行走”帧,直到我抬起左/右键然后回到“空闲”位置。发生的情况是,即使我没有提起钥匙,它也会通过一次循环然后进入空闲状态。这是我的代码

      var leftKeyDown:Boolean = false;
        var upKeyDown:Boolean = false;
        var rightKeyDown:Boolean = false;
        var downKeyDown:Boolean = false;
        var charSpeed:Number = 7;
        man.addEventListener(Event.ENTER_FRAME, moveChar);
    function moveChar(event:Event):void{
    if(leftKeyDown || rightKeyDown)
{
    man.gotoAndPlay("walk");
}


if(rightKeyDown)
{
    man.x += charSpeed;
    man.scaleX=1;
}
if(leftKeyDown)
{
    man.x -= charSpeed;
    man.scaleX=-1;
}

            }


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

            if(event.keyCode == 37 || event.keyCode == 65){
                leftKeyDown = true;


            }

            if(event.keyCode == 38 || event.keyCode == 87){
                upKeyDown = true;
            }
            if(event.keyCode == 39 || event.keyCode == 68){
                rightKeyDown = true;
                    }
            if(event.keyCode == 40 || event.keyCode == 83){
                downKeyDown = true;
            }

        }



        // checking for upkeys
     stage.addEventListener(KeyboardEvent.KEY_UP, checkKeysUp);
function checkKeysUp(event:KeyboardEvent):void{
    if(event.keyCode == 37 || event.keyCode == 65){
        leftKeyDown = false;
        man.gotoAndStop("idle");
    }
    if(event.keyCode == 38 || event.keyCode == 87){
        upKeyDown = false;

    }
    if(event.keyCode == 39 || event.keyCode == 68){
        rightKeyDown = false;
        man.gotoAndStop("idle");
    }
    if(event.keyCode == 40 || event.keyCode == 83){
        downKeyDown = false;

    }
}

谢谢

【问题讨论】:

    标签: flash actionscript-3 animation actionscript flash-cs4


    【解决方案1】:

    在 if 语句通过后退出函数,如果所有其他方法都失败,则它是空闲的。

    if(leftKeyDown){
        man.x -= charSpeed;
        man.scaleX=-1;
        man.gotoAndPlay("walk");
        return;
    }
    if(rightKeyDown){
        man.x += charSpeed;
        man.scaleX=1;
        man.gotoAndPlay("walk");
        return;
    }
    
     man.gotoAndStop("idle");
    

    或者如果你想要另一个方面

    switch(true){
      case leftKeyDow:
            man.x -= charSpeed;
            man.scaleX=-1;
            man.gotoAndPlay("walk");
            break;
      case rightKeyDown:
            man.x += charSpeed;
            man.scaleX=1;
            man.gotoAndPlay("walk");
            break;
      default:
            man.gotoAndStop("idle");
    }
    

    【讨论】:

    • 它进入“walk”帧,但之后不播放。
    • 如果我玩(),它会起作用;但我需要它是 gottoAndPlay();因为我还要做一个攻击动画
    • 那个问题与这个问题无关。
    【解决方案2】:

    尝试使用 bliting。以下是一些学习方法的网站。

    http://www.gotoandlearn.com/play.php?id=140

    http://www.gotoandlearn.com/play.php?id=147

    http://www.adobe.com/devnet/flash/articles/blitting_mc.html

    http://blog.flexwiz.net/spritesheet-animation-in-as3/

    您还可以使用 TexturePacker 创建您的 blit/sprite 表。

    http://www.texturepacker.com/

    我在很多项目中都使用过它,它可以节省大量时间

    【讨论】:

    • 我认为这不是很有必要
    【解决方案3】:

    我看到的一个问题是您的 if/else 语句。

    目前,如果你的右键向上,无论你的左键是否向下,都会调用空闲动画。它需要更改为:

    if(leftKeyDown || rightKeyDown)
    {
        man.gotoAndPlay("walk");
    }
    else
    {
        man.gotoAndStop("idle");
    }
    
    if(rightKeyDown)
    {
        man.x += charSpeed;
        man.scaleX=1;
    }
    if(leftKeyDown)
    {
        man.x -= charSpeed;
        man.scaleX=-1;
    }
    

    还要确保在行走和空闲动画结束时在动画循环中调用stop();,以防止它一直播放。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      • 2012-03-10
      • 2012-07-04
      • 2013-11-05
      • 2014-03-25
      • 1970-01-01
      相关资源
      最近更新 更多