我需要在屏幕上同时移动3个不同的MovieClip。 (从下到上) 使用像Caurina这样的补间类没有的最佳方法是什么?
感谢您的提示。
答案 0 :(得分:2)
您可以将事件侦听器添加到侦听Event.ENTER_FRAME
事件的显示对象的父容器中。在每个Event.ENTER_FRAME
事件中,您只需递减显示对象的y
属性,如下例所示。
package
{
import flash.display.Sprite;
import flash.events.Event;
[SWF(width="600", height="500")]
public class Main extends Sprite
{
private var _squares:Vector.<Square>;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}// end function
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
_squares = new Vector.<Square>();
var redSquare:Square = new Square(0xFF0000, 100);
redSquare.x = 0;
redSquare.y = 400;
addChild(redSquare);
var greenSquare:Square = new Square(0x00FF00, 100);
greenSquare.x = 300;
greenSquare.y = 300;
addChild(greenSquare);
var blueSquare:Square = new Square(0x0000FF, 100);
blueSquare.x = 500;
blueSquare.y = 100;
addChild(blueSquare);
_squares.push(redSquare, greenSquare, blueSquare);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}// end function
private function onEnterFrame(e:Event):void
{
for each(var square:Square in _squares)
{
if (square.y > 0) square.y -= 5;
}// end for
}// end function
}// end class
}// end package
import flash.display.Sprite;
internal class Square extends Sprite
{
public function Square(color:uint, size:Number)
{
graphics.beginFill(color);
graphics.drawRect(0, 0, size, size);
graphics.endFill();
}// end function
}// end function
我认为如果你只是简单地使用Greensock的Tweening platform,你会让生活变得更轻松。
答案 1 :(得分:0)
您可以使用框架和补间在Flash IDE中为它们设置动画。 您也可以自己以编程方式为它们设置动画。将每个影片剪辑放在屏幕底部,编写一些代码,将影片剪辑稍微移动到屏幕顶部并定期调用(使用Timer,EnterFrame事件侦听器或setInterval),当所有movieClip到达时停止调用此代码top(使用Timer.stop(),removeEventListener或clearInterval)。 我不明白为什么你可能需要这样做,因为有很多补间库可以帮你完成所有这些。