AS3:单帧时间轴重复功能

Posted

技术标签:

【中文标题】AS3:单帧时间轴重复功能【英文标题】:AS3: repeating function in sigle frame timeline 【发布时间】:2015-07-08 13:40:09 【问题描述】:

我是动作脚本的新手。我有单帧时间轴,并且有垂直移动影片剪辑的功能。我只想重复三遍。 代码有效,我只是不确定这是正确的方法还是太复杂了。

var pocet:Number = 0;

pruh.addEventListener(Event.ENTER_FRAME, fl_AnimateVertically);

function fl_AnimateVertically(event:Event)

if (pruh.y >= stage.stageHeight) 
    pocet++;

if (pruh.y < stage.stageHeight) 
pruh.y += 3;

else 
    pruh.y = 0 - pruh.y;

if (pocet == 3) 
    pruh.removeEventListener(Event.ENTER_FRAME, fl_AnimateVertically);


感谢

【问题讨论】:

【参考方案1】:

试试这个

var pocet:Number = 0;

pruh.addEventListener(Event.ENTER_FRAME, fl_AnimateVertically);
var startY:int=pruh.y;
function fl_AnimateVertically(event:Event)

if (pruh.y >= stage.stageHeight) 
    pocet++;
	pruh.y=startY;

if (pruh.y < stage.stageHeight) 
pruh.y += 3;

else 
    pruh.y = 0 - pruh.y;

if (pocet ==3) 
    pruh.removeEventListener(Event.ENTER_FRAME, fl_AnimateVertically);
	
trace("done");

【讨论】:

【参考方案2】:

恭喜你实现了目标。

您的代码在可读性方面可以改进。您将fl_AnimateVertically 作为描述性名称,但除此之外,很难弄清楚到底发生了什么。我的意思是肯定它会在 y 上加上 3,这可能会导致移动,但理解确切的行为并非易事。

这就是为什么您要使用抽象或更多通常称为自上而下的方法的原因。 您目前正在做的是向坐标添加一个值,从而创建一个动画。你真正想要的是创建一个动画,而不是详细说明它的实际含义。

果然,人们以前使用代码创建动画。这就是为什么您可以创建抽象意义上的动画:动画是对象的属性随时间的变化。 In the realm of flash an animation is called a tween and there's a class doing exactly that..

让我们看看那里的示例代码:

var myTween:Tween = new Tween(myObject, "x", Elastic.easeOut, 0, 300, 3, true);

并将其应用于您的情况。

var verticalAnimation:Tween = new Tween(pruh, "y", Elastic.easeOut, pruh.y, stage.stageHeight, 3, true);

您必须根据自己的喜好调整持续时间。我希望你看到它是如何更容易阅读和维护的,因为你指定了动画的属性,比如持续时间。您还可以指定缓动,使动作更有趣。

好的,这只是一个动画,但你想要 3 个,对吗? 更准确地说,您想在完成后再次制作相同的动画。 你完全可以这样做:

var animationCount:uint = 0;
var verticalAnimation:Tween = new Tween(pruh, "y", Elastic.easeOut, pruh.y, stage.stageHeight, 3, true);

verticalAnimation.addEventListener(TweenEvent.MOTION_FINISH, onMotionFinish); // wait for the animation to be finished

function onMotionFinish(e:TweenEvent):void

    animationCount++; // add 1 to the counter

    if(animationCount >= 3)  // check how many times the animation finished so far
    
        // if it was the last one, remove the listener
        verticalAnimation.removeEventListener(TweenEvent.MOTION_FINISH, onMotionFinish);
    
    else
    
        // otherwise rewind and start again
        verticalAnimation.rewind();
        verticalAnimation.start();
    

除了这个内置在Tween 类中的库之外,还有其他更强大的库。 The one from greensock is very popular and easy to use你可以find the documentation for the flash version here

【讨论】:

以上是关于AS3:单帧时间轴重复功能的主要内容,如果未能解决你的问题,请参考以下文章

AS3-鼠标点击会影响数组时间轴中的对象

AS3:如何从影片剪辑内部检查和重置主时间轴上的变量

ActionScript 3 AS3视频播放器,放置在时间轴上,带有旋转预加载器

AS3 Loader 不断重新加载相同的 swf

Pandas - ValueError:无法从重复的轴重新索引

子图是重叠的轴标签[重复]