AS3 - Move MovieClip across screen

谁都会走 提交于 2019-12-14 02:26:02

问题


I've 3 different MovieClips that I need to move at the same time across the screen. (From bottom to top) What is the best way of doing this without using a tweening class like Caurina?

Thank you for tips.


回答1:


You could add an event listener to the parent container of the display objects which listens for the Event.ENTER_FRAME event. On each Event.ENTER_FRAME event you simply decrement the y property of the display objects like in the following example.

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

I think you'd be making life easier for yourself though if you simply used Greensock's Tweening platform instead.




回答2:


You can animate them in Flash IDE with frames and tweenings. Also you can animate them programmatically yourself. Place every movie clip at the bottom of the screen, write some code that moves your movieClips a little to the top of the screen and gets called periodically (using Timer, EnterFrame event listener or setInterval), stop calling this code when all movieClips reached the top (using Timer.stop(), removeEventListener or clearInterval). I don't see why you might need to do that because there are many tweening libraries that do all this for you.



来源:https://stackoverflow.com/questions/7299595/as3-move-movieclip-across-screen

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!