我有不同的卡片,我需要以波浪形式显示它们,即卡片在不同的时间顺序和系统地打开和关闭,以便它们形成波浪。
我已经在阵列中有卡片了。如何以最有效的方式实现此动画?
答案 0 :(得分:2)
你应该习惯使用Math.sin()和Math.cos()。查看简单的trig函数并记住转换弧度和度数。一旦掌握了这些概念,就可以在不同的环境中重复使用许多很酷且有趣的技巧。以下代码段演示了如何使用“类似波形”移动对象。它可能不是你想要的,但它应该帮助你到达你想去的地方。它使用CS4 IDE在AS3中编写。
var n:Number = 0;
var ball:MovieClip = new MovieClip();
ball.graphics.beginFill( 0xFFCC00, 1 );
ball.graphics.drawCircle( 0, 0, 15 );
addChild( ball );
ball.x = stage.stageWidth;
ball.y = stage.stageHeight * .5;
var prev:Point = new Point(ball.x, ball.y);
addEventListener( Event.ENTER_FRAME, onEnterFrameHanlder );
function onEnterFrameHanlder( event:Event ):void
{
n+=3;
ball.x = Math.cos( n * .25 * Math.PI/180 ) * ( stage.stageWidth * .5 ) + ( stage.stageWidth * .5 );
ball.y = Math.sin( n * Math.PI/180 ) * ( stage.stageHeight * .5 ) + ( stage.stageHeight * .5 );
graphics.lineStyle( 1, 0xFFCC00 );
graphics.moveTo( ball.x, ball.y );
graphics.lineTo( prev.x, prev.y );
prev.x = ball.x;
prev.y = ball.y;
}
答案 1 :(得分:2)
假设你的意思是体育场“波浪”效果,尝试定义一个带偏移的数组,这将取决于你是否正在使用补间引擎等,或者你正在使用另一个函数。
例如,Timer类在这一方面做得很好:
private var t:Timer = new Timer(100, 0);
private var index:int = 0;
t.addEventListener(TimerEvent.TIMER, ping);
t.start();
private function ping(ev:TimerEvent) {
if(index < waveArray.length){
waveArray[index].startAnimation(); //If animated by object
startAnimation(waveArray[index]); //If animated by container
index ++;
}
else {
t.stop();
endAnimation(); //All cards have animated
}
}