在as3中移动时的行走动画

Posted

技术标签:

【中文标题】在as3中移动时的行走动画【英文标题】:Walking animation while moving in 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;

    

谢谢

【问题讨论】:

【参考方案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();,以防止它一直播放。

【讨论】:

以上是关于在as3中移动时的行走动画的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的左右移动动画不起作用?

3dmax中如何制作汽车的行走动画

Action Script 3. 角色移动时改变动画

将弹丸移动到鼠标点击位置 AS3

点击移动动画不起作用

高分求一个 flash as3.0的关于鼠标拖曳startDrag() 方法后 怎么获取拖曳后的坐标!!做凹透镜原理动画!