• 爱情文章
  • 亲情文章
  • 友情文章
  • 生活随笔
  • 校园文章
  • 经典文章
  • 人生哲理
  • 励志文章
  • 搞笑文章
  • 心情日记
  • 英语文章
  • 范文大全
  • 作文大全
  • 新闻阅读
  • 当前位置: 山茶花美文网 > 亲情文章 > 正文

    星形接法_AS3文档类打造绚烂星形变幻效果

    时间:2018-08-10来源:山茶花美文网 本文已影响 山茶花美文网手机站

    文档类:
     

    package 

    {

            import flash.display.Sprite;

            import flash.events.Event;

            import flash.events.MouseEvent;

            

            [SWF(backgroundColor = "0x000000", frameRate = "60")]



            public class Main extends Sprite 

            {

                    private var patternList:Array = new Array();

                    

                    private var moveBullet:Array = new Array();

                    

                    public function Main():void 

                    {

                            if (stage) init();

                            else addEventListener(Event.ADDED_TO_STAGE, init);

                    }

                    

                    private function init(e:Event = null):void 

                    {

                            removeEventListener(Event.ADDED_TO_STAGE, init);

                            // entry point

                            MouseDown(null);

                            

                            addEventListener(Event.ENTER_FRAME, EnterFrame );

                            stage.addEventListener(MouseEvent.MOUSE_DOWN, MouseDown);

                    }

                    

                    private function EnterFrame(event:Event):void 

                    {

                            var i:int = 0;

                            



                            for ( i = 0; i < patternList.length; i++ )

                            {

                                    var bullet:Bullet = patternList[i].Run();

                                    if ( bullet != null )

                                    {

                                            addChild( bullet );

                                    }

                            }

                            for ( i = patternList.length - 1; i >= 0; i-- )

                            {

                                    if ( patternList[i].isEnd() )

                                    {

                                            //        从待命到移动

                                            for ( var j:int = 0; j < patternList[i].waitBullet.length; j++ )

                                            {

                                                    patternList[i].waitBullet[j].StartSlide();

                                                    moveBullet.push( patternList[i].waitBullet[j] );                                                

                                            }

                                            patternList.splice( i, 1 );                                                

                                    }

                            }

                                            

                            //        移动

                            if ( moveBullet.length > 0 )

                            {

                                    for ( i = moveBullet.length - 1; i >= 0; i-- )

                                    {

                                            //        

                                            if ( moveBullet[i].slideFlag )

                                            {

                                                    moveBullet[i]._xx += Math.cos( moveBullet[i].slideAngle * Math.PI / 180 ) * moveBullet[i].slideSpeed;

                                                    moveBullet[i]._xy += Math.sin( moveBullet[i].slideAngle * Math.PI / 180 ) * moveBullet[i].slideSpeed;

                                                    moveBullet[i].x = moveBullet[i]._xx;

                                                    moveBullet[i].y = moveBullet[i]._xy;

                                            

                                                    if ( moveBullet[i].slideSpeed > 0 )

                                                    {

                                                            moveBullet[i].slideSpeed -= moveBullet[i].slideSpeedMax / 50;

                                                            if ( moveBullet[i].slideSpeed < 0 )        moveBullet[i].slideFlag = false;

                                                    }

                                                    

                                            }else

                                            {        

                                                    moveBullet[i]._xx += Math.cos( moveBullet[i].moveAngle * Math.PI / 180 ) * 1;

                                                    moveBullet[i]._xy += Math.sin( moveBullet[i].moveAngle * Math.PI / 180 ) * 1;

                                                    moveBullet[i].x = moveBullet[i]._xx;

                                                    moveBullet[i].y = moveBullet[i]._xy;

                                                    

                                                    if ( moveBullet[i].x < -50 || moveBullet[i].x > stage.stageWidth + 50 || moveBullet[i].y < -50 || moveBullet[i].y > stage.stageHeight + 50 )

                                                    {

                                                            removeChild( moveBullet[i] );

                                                            moveBullet.splice( i, 1 );

                                                    }

                                            }

                                    }

                            }

                    }

                    

                    private function MouseDown(event:MouseEvent):void

                    {

                            //        小星

                            patternList.push( new Pattern(stage.stageWidth / 2, stage.stageHeight / 2, false, 50, 0xFF5555, (270 + 72 * 0), 3 ) );

                            patternList.push( new Pattern(stage.stageWidth / 2, stage.stageHeight / 2, false, 50, 0xFF5555, (270 + 72 * 1), 3 ) );

                            patternList.push( new Pattern(stage.stageWidth / 2, stage.stageHeight / 2, false, 50, 0xFF5555, (270 + 72 * 2), 3 ) );

                            patternList.push( new Pattern(stage.stageWidth / 2, stage.stageHeight / 2, false, 50, 0xFF5555, (270 + 72 * 3), 3 ) );

                            patternList.push( new Pattern(stage.stageWidth / 2, stage.stageHeight / 2, false, 50, 0xFF5555, (270 + 72 * 4), 3 ) );

                            //        大星

                            patternList.push( new Pattern(stage.stageWidth/2, stage.stageHeight/2, false, 100, 0x5555FF, (270 + 72 * 0), 5 ) );

                            patternList.push( new Pattern(stage.stageWidth/2, stage.stageHeight/2, false, 100, 0x5555FF, (270 + 72 * 1), 5 ) );

                            patternList.push( new Pattern(stage.stageWidth/2, stage.stageHeight/2, false, 100, 0x5555FF, (270 + 72 * 2), 5 ) );

                            patternList.push( new Pattern(stage.stageWidth/2, stage.stageHeight/2, false, 100, 0x5555FF, (270 + 72 * 3), 5 ) );

                            patternList.push( new Pattern(stage.stageWidth/2, stage.stageHeight/2, false, 100, 0x5555FF, (270 + 72 * 4), 5 ) );

                    }

                    

            }

            

    }

    //////////////////////////////////////////////////////////////////////

    //////////////////////////////////////////////////////////////////////

    import flash.display.Sprite;

    import flash.geom.Point;



    //-----------------------------

    //        图案类

    class Pattern {

            

            private var reverse:Boolean = false;                

            private var starSize:Number = 150;                        

            private var bulletColor:uint = 0x000000;        

            

            private var slideAngle:Number = 0;                         

            private var slideSpeed:Number = 0;                        

            

            private var end:Boolean = false;

            private var count:int = 0;

            private var defX:int = 0;

            private var defY:int = 0;

                            

            private var target:Array = new Array();

            

            private static const PATH_OBJ_NUM:int = 20;                //        子弹数

            private static const TARGET_NUM:int = 5;

            private static const TARGET_ANGLE:Array = [ 270 + 72 * 3, 270 + 72 * 1, 270 + 72 * 4, 270 + 72 * 2, 270 ];        //        通过的目标地点的角度

            private static const TARGET_ANGLE2:Array = [ 270 + 72 * 2, 270 + 72 * 4, 270 + 72 * 1, 270 + 72 * 3, 270 ];        //        



            public        var waitBullet:Array = new Array();                

            

            public function Pattern(

                    _gx:int = 0, _gy:int = 0,

                    _rev:Boolean = false,

                    _starSize:Number = 80,

                    _bulletColor:uint = 0x000000,

                    _slideAngle:Number = 0,

                    _slideSpeed:Number = 0 

            ) {

                    count = 0;

                    defX = _gx;

                    defY = _gy;

                    

                    reverse = _rev;

                    starSize = _starSize;

                    bulletColor = _bulletColor;

                    slideAngle = _slideAngle;

                    slideSpeed = _slideSpeed;

                    

                    for ( var i:int = 0; i < 5; i++ )

                    {

                            var angle:Number = TARGET_ANGLE[i];

                            if ( reverse ) angle = TARGET_ANGLE2[i] + 180;        //        反転

                            else                    angle = TARGET_ANGLE[i];



                            target[i] = new Point( Math.cos( angle * Math.PI / 180 ) * starSize, Math.sin( angle * Math.PI / 180 ) * starSize );

                    }

            }

            //子弹生成

            public function Run() : Bullet {

                    

                    var bullet:Bullet = new Bullet(bulletColor,slideAngle,slideSpeed);

                            

                    var targetNo:int = int(count / PATH_OBJ_NUM);

                    var targetRate:int = int(count % PATH_OBJ_NUM);

                    var p:Point;



                    //子弹的座标

                    p = Point.interpolate( target[targetNo], target[(targetNo+(TARGET_NUM-1))%TARGET_NUM], targetRate / PATH_OBJ_NUM );                

                    bullet.x = p.x + defX;

                    bullet.y = p.y + defY;

            bullet._xx = p.x + defX;

            bullet._xy = p.y + defY;



                    //子弹的移动角度

            //if( !reverse )        bullet.moveAngle = -count / PATH_OBJ_NUM / TARGET_NUM * 720 + 135;

                    //else                        bullet.moveAngle = count / PATH_OBJ_NUM / TARGET_NUM * 720 - 135;



                    bullet.moveAngle = ( -int(count / PATH_OBJ_NUM) / TARGET_NUM * 720 + 108) + ((count % PATH_OBJ_NUM) * 180 / PATH_OBJ_NUM);        //        Target始点角度 + 180 * rate        グレイソーに入る前の奴



                    

                    waitBullet.push( bullet );

                    

                    count++;

                    if ( count == TARGET_NUM * PATH_OBJ_NUM )        end = true;

                    

                    return        bullet;

            }



            public        function isEnd() : Boolean {        return        end;        }

    }



    //-----------------------------

    //        子弹类

    class Bullet extends Sprite {

            

            public        var slideFlag:Boolean = false;        

            

            public        var slideAngle:Number = 0;

            public        var slideSpeed:Number = 0;

            public        var slideSpeedMax:Number = 0;

            public        var moveAngle:Number = 0;

            

            public        var _xx:Number = 0;

            public        var _xy:Number = 0;

            

            public function Bullet(color:uint,_slideAngle:Number = 0,_slideSpeed:Number = 50) {

                    super();

                    

                    graphics.beginFill(color);

                    graphics.drawCircle(0, 0, 5);

                    graphics.endFill();

                    

                    graphics.beginFill(0xFFFFFF, 0.5);

                    graphics.drawCircle(0, 0, 3);

                    graphics.endFill();

                    

                    slideAngle = _slideAngle;

                    slideSpeed = _slideSpeed;

                    slideSpeedMax = _slideSpeed;

                    

                    slideFlag = false;

            }

            

            public        function StartSlide():void 

            {

                    slideFlag = true;

            }

            

    }
    • 星形接法_AS3文档类打造绚烂星形变幻效果 相关文章:
    • 爱情文章
    • 亲情文章
    • 友情文章
    • 随笔
    • 哲理
    • 励志
    • 范文大全