Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 在as3中移动时的行走动画_Flash_Actionscript 3_Animation_Actionscript_Flash Cs4 - Fatal编程技术网

Flash 在as3中移动时的行走动画

Flash 在as3中移动时的行走动画,flash,actionscript-3,animation,actionscript,flash-cs4,Flash,Actionscript 3,Animation,Actionscript,Flash Cs4,好的,我有一个电影剪辑,以“男人”为例,我制作了他,这样他就有了一个像这样的闲散的画面。他也可以左右移动。(我也让他攻击了,但那无关紧要) [闲着][走着] 最后一帧已结束 gotoAndPlay("walk"); 我需要它在“行走”帧中循环,直到我抬起左/右键,然后返回到“空闲”位置。发生的情况是,它将循环一次,然后进入空闲状态,即使我没有抬起键。这是我的代码 var leftKeyDown:Boolean = false; var upKeyDown:Boole

好的,我有一个电影剪辑,以“男人”为例,我制作了他,这样他就有了一个像这样的闲散的画面。他也可以左右移动。(我也让他攻击了,但那无关紧要)

[闲着][走着] 最后一帧已结束

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;

    }
}

感谢您尝试使用bliting。这里有一些网站可以学习如何使用bliting


我看到的一个问题是你的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();
调用,以防止它一直播放。

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

我不认为这是非常必要的,它进入“行走”帧,但之后不播放。如果我播放(),它会起作用;但我需要它进入并播放();因为我还必须制作攻击动画,该问题与此问题无关。