スポンサーサイト

-------- | --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[ActionScript 3.0] 動く矢印

2007-08-11 | 20:25

package{
    import flash.display.*;
    import flash.events.*;
    import flash.utils.*;
    [SWF(width="400", height="400",backgroundColor="0xffffff")]

        public class MovingArrow extends Sprite{
        private var arrows:Array = new Array();

            public function MovingArrow(){
                for (var i:int = 0; i < 50; i++) {

                    var arrow:Arrow = new Arrow();

                    arrow.x = Math.random()*400;
                    arrow.y = Math.random()*400;
                    arrow.vx = Math.random()*5;

                    arrow.scaleX = arrow.scaleY = Math.random();
                    arrow.alpha = 1-Math.random();

                    addChild(arrow);
                    arrows.push(arrow);
                }

                addEventListener(Event.ENTER_FRAME, loop);
            }

            private function loop(e:Event):void{
                for each(var arrow:Arrow in arrows){
                    arrow.x += arrow.vx;
                    if(arrow.x > 400)
                        arrow.x = 0;
                }
            }
        }
}
package {
    import flash.display.Sprite;

    public class Arrow extends Sprite {
        private var _vx:int ;
        public function Arrow() {
            graphics.lineStyle(1, 0, 1);
            graphics.beginFill(0xff0000);
            graphics.moveTo(-30, -15);
            graphics.lineTo(0, -15);
            graphics.lineTo(0, -30);
            graphics.lineTo(30, 0);
            graphics.lineTo(0, 30);
            graphics.lineTo(0, 15);
            graphics.lineTo(-30, 15);
            graphics.lineTo(-30, -15);
            graphics.endFill();
        }

        public function get vx():int{
            return _vx;
        }

        public function set vx(v:int):void{
            _vx = v;
        }
    }
}  

別な方法

上の方法では、Arrayにオブジェクトを入れておいて、ENTER_FRAMEイベントのハンドラの中でArray内のオブジェクトを順に動かしている。
下の方法では、各オブジェクトのENTER_FRAMEイベントハンドラ内で各オブジェクトを動かしている。(イベントハンドラ内ではイベントのtargetプロパティで、イベント対象のオブジェクトを取得できる)

package{
    import flash.display.*;
    import flash.events.*;
    import flash.utils.*;
    [SWF(width="400", height="400",backgroundColor="0xffffff")]

        public class MovingArrow2 extends Sprite{
            public function MovingArrow2(){
                for (var i:int = 0; i < 50; i++) {

                    var arrow:Arrow = new Arrow();

                    arrow.x = Math.random()*400;
                    arrow.y = Math.random()*400;
                    arrow.vx = Math.random()*5;

                    arrow.scaleX = arrow.scaleY = Math.random();
                    arrow.alpha = 1-Math.random();

                    addChild(arrow);
                    arrow.addEventListener(Event.ENTER_FRAME, loop);
                }
            }

            private function loop(e:Event):void{
                var arrow:Arrow = Arrow(e.target);
                arrow.x += arrow.vx;
                if(arrow.x > 400)
                    arrow.x = 0;
            }
        }
}
スポンサーサイト

Comment

Post a comment

Secret

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。