在as3中移动时行走的动画

时间:2012-02-17 00:11:24

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

好的,所以我有一个实例为“男人”的影片剪辑我已经让他这样他有一个像这样的空闲和步行框架。他也可以向左/向右移动。 (我也让他受到攻击但这无关紧要);

[闲置] [走[] 最后一帧有

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;

    }
}

感谢

3 个答案:

答案 0 :(得分:2)

在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");
}

答案 1 :(得分:0)

尝试使用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/

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

答案 2 :(得分:0)

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

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

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();个调用,以及空闲动画,以防止它一直播放。