AS3文档类打造绚烂星形变幻效果

文档类:
 

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;

        }

        

}

 

时间: 2024-11-02 18:19:21

AS3文档类打造绚烂星形变幻效果的相关文章

C++MFC编程笔记day05 文档类-单文档和多文档应用程序

 文档类    1 相关类    CDocument类-父类是CCmdTarget类,所以,文档类也可以处理菜单等               命令消息.作用保存和管理数据.    注意事项:如何解决断言错误    2 在视图中显示文档中的数据     2.1 CView::OnInitialUpdate         作用初始化视图,在附加文档之后,显示之前,由框架调用.     2.2 CView::GetDocument         获取与视图相关的文档     2.3 CFrame

cximage sdi 单文档-CXimage Demo 改为单文档应用程序后,文档类里面的线程,发送消息视类收不到?

问题描述 CXimage Demo 改为单文档应用程序后,文档类里面的线程,发送消息视类收不到? 最近下载了一个CxImage 的Demo源程序,但Demo是基于多文档的,我想把它改成单文档,就先实验了一个功能--向左旋转,但在线程里面发的消息视类没有收到,有没有人知道原因? 我是一个新手,请高手帮忙

在Word 2007文档中设置文本框三维效果

用户可以在Word 2007中为文本框设置多种三维效果,并且可以针对选择的三维效果进行诸如颜色.深度.方向.照明等效果设置,还可以从上翘.下俯.左偏.右偏四个方面调整文本框三维效果的角度.通过为文本框设置三维效果,使文本框具有立体感,从而增强Word文档的表现力.在Word2007文档中设置文本框三维效果的步骤如下所述: 第1步,打开Word2007文档窗口,单击选中文本框,在打开的"格式"功能区中单击"三维效果"分组中"三维效果"按钮,如图20

Word文档中设置首字下沉效果的方法

  Word文档中设置首字下沉效果的方法           首字下沉用途非常广,或许你在报纸上.书籍.杂志上也会经常看到首字下沉的效果. 今天就让Office办公助手的小编讲述如何在Word文档中的设置首字下沉效果. Word2003怎样设置首字下沉 首先,选种要设置首字下沉的那个段落,然后单击菜单栏的"格式"中的"首字下沉",在弹出的窗口中可以清楚的看见有三种效果,无.下沉.悬挂,选种某种效果后单击确定按钮就可以了.当然,也可以设置它的"字体"

Word2010文档中设置剪贴画发光效果

  Word2010文档中的剪贴画发光效果究其实质就是在剪贴画周围添加彩色边框,跟"柔化边缘"功能配合使用,使剪贴画看上去似乎在背后有彩色光照.在Word2010文档中设置剪贴画发光效果的步骤如下所述: 第1步,打开Word2010文档窗口,选中需要设置发光效果的剪贴画. 第2步,在"图片工具/格式"功能区中,单击"图片样式"分组中的"图片效果"按钮,选择"发光"选项,并在打开的发光效果列表中选择合适的发光

在Word2007文档中设置剪贴画发光效果

  Word2007文档中的剪贴画发光效果究其实质就是在剪贴画周围添加彩色边框,跟"柔化边缘"功能配合使用,使剪贴画看上去似乎在背后有彩色光照.在Word2007文档中设置剪贴画发光效果的步骤如下所述: 第1步,打开Word2007文档窗口,选中需要设置发光效果的剪贴画. 第2步,在"图片工具"功能区的"格式"选项卡中,单击"图片样式"分组中的"图片效果"按钮,选择"发光"选项,并在打开

在Word 2007文档中设置图片柔化边缘效果

借助Word2007提供的图片柔化边缘功能,用户可以为Word2007文档中的图片设置柔化边缘效果,使图 片的边缘呈现比较模糊的效果,操作步骤如下所述: 第1步,打开Word2007文档窗口,选中需要设置柔化边缘的图片. 第2步,在"图片工具"功能区的"格式"选项卡中,单击"图片样式"分组中的"图片效果"按钮, 选择"柔化边缘"选项,并在打开的柔化边缘效果列表中选择合适的柔化边缘效果即可,如图2009030

在Word2010文档中设置艺术字柔化边缘效果

第1步,打开Word2010文档窗口,单击需要设置柔化边缘效果的艺术字对象,使其处于编辑状态. 第2步,在"绘图工具/格式"功能区中,单击"形状样式"分组中的"形状效果"按钮.  单击"形状效果"按钮 第3步,打开形状效果菜单,指向"柔化边缘"选项.在打开的柔化边缘效果列表中任意一种柔化边缘效果,则Word2010文档中的艺术字将实时显示最终效果.确定使用某一种柔化边缘效果后单击该效果即可.  选择柔化边缘

在Word2007文档中设置剪贴画棱台效果

  在Word2007文档中,用户可以为剪贴画设置棱台效果,从而实现剪贴画的多种立体化效果,例如棱纹.斜面.凸起等棱台效果,操作步骤如下所述: 第1步,打开Word2007文档窗口,选中需要设置棱台效果的剪贴画. 第2步,在"图片工具"功能区的"格式"选项卡中,单击"图片样式"分组中的"图片效果"按钮,选择"棱台"选项,并在打开的棱台效果列表中选择合适的剪贴画棱台效果,如图2009032106所示. 图20