在flash pro中动画实例

时间:2014-01-18 23:46:01

标签: actionscript-3 flash animation actionscript adobe

所以我有一个游戏,包括3帧,一个开始,规则和实际的游戏框架。

我希望有一张脸从中性表情到皱眉脸的图像,同时不断向下移动。 我知道要把它向下移动你可以做到

instancename.y += 10;

但是当它下降的时候,我怎么能让它每隔一段时间就皱起来呢?

我已经绘制了表达式的多个面,那么我需要皱眉呢?

我有photoshop,如果这有很大的不同,

1 个答案:

答案 0 :(得分:1)

所以我不确定你想要皱眉脸的频率。它可以是随机时间,也可能是在一定距离之后,或者您可以使用Timer进行设置,以指定的间隔运行。所以我会解释所有3。

首先是随机时间。您需要为此解决方案执行导入flash.utils.getTimer。我假设你想让你皱着眉头留下皱眉的脸超过1毫秒。如果是这样的话那就是我要做的事情:

设置此成员变量:

private var beginTime:Number;

然后在运行第一个移动功能之前:

beginTime = getTimer();

在包含instancename.y + = 10;

的循环或移动函数中
private function loop():void {
    instancename.y += 10;

    //get our delta time        
    var dt:Number = getTimer() - beginTime; 
    //set random variable 50% chance to change the frame    
    var random:int = Math.random() * 2;

    //dt > 3000 just means 3 seconds have passed, you can lower that number to decrease the delay before we change frames for the "face" animation
    if ( random > 0 && dt > 3000 ) {
        beginTime = getTimer();

        if ( instancename.currentFrameLabel == "neutral" ) {
            instancename.gotoAndPlay("frowning");
        } 
        else {
            instancename.gotoAndStop("neutral");
        }
    }
}

这将在随机时间更改帧,延迟时间为3000毫秒或3秒(随意更改)。

现在距离版本。所以这基本上只是说当我们从某个原点到达一定距离时,改变框架。但这取决于设置的几个变量:

//set the variable origin and a maxDistance
private var origin:Point = new Point( instancename.x, instancename.y );
private var maxDistance:int = 50;

//then in your loop or movement function
private function loop():void {
    instancename.y += 10;

    //when our distance is >= to our maxDistance, change the frame
    if ( Point.distance( new Point( spr.x, spr.y ), origin ) >= maxDistance ) {
        if ( instancename.currentFrameLabel == "neutral" ) {
            instancename.gotoAndPlay("frowning");
        } 
        else {
            instancename.gotoAndStop("neutral");
        }
        //set the origin variable again
        origin = new Point( instancename.x, instancename.y );
    }

最后是计时器功能。使用TimerEvent.TIMER的事件侦听器和要调用的函数

设置计时器变量
private var timer:Timer = new Timer(3000, 0);

然后在适用的地方设置:

timer.addEventListener(TimerEvent.TIMER, changeFrame);
timer.start(); //to start your timer

然后在计时器功能中:

private function changeFrame( e:TimerEvent ):void {
    if ( instancename.currentFrameLabel == "neutral" ) {
        instancename.gotoAndPlay("frowning");
    } 
    else {
        instancename.gotoAndStop("neutral");
    }
}

不要忘记在使用完毕后停止它:timer.stop();

这是解决问题的几种方法。我应该注意到第二个解决方案(距离1)可以通过多种不同的方式进行优化,这只是一种方法。

希望这有帮助,祝你好运!