论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Flash AS编程教程
Tag:2.0,3.0菜鸟,游戏,,cs,技巧,源码,,文本,文字,函数,音乐,随机,拖拽,asp,access,xml,mc,视频教程

随机运动的瓢虫(AS3)

文章类别:Flash AS编程 | 发表日期:2008-10-6 17:44:03


 所有随机运动的功能,都在瓢虫类(RandomAirPort)中,只要在舞台添加一个“瓢虫”,它就可以在舞台中随机的运动,改变右下方数字框的内容,可以添加或者删减舞台中“瓢虫”的数量,瓢虫”数目超过30以后,player的运行速度就明显减慢了,主要问题在哪里呢?
这个类的代码如下:

package {
    import flash.display.MovieClip;
    import flash.utils.Timer;
    import flash.events.TimerEvent;

    public class RandomAirPort extends MovieClip {
        private const changeDirectSpeed:Number = 2000;//瓢虫随机转换方向的频率,单位:毫秒
        private const updateSpeed:Number = 30;//刷新瓢虫位置的频率,单位:毫秒
        private var airWalkSpeed:Number = 1;//瓢虫移动速度,单位:像素
        private const PI:Number = Math.PI;
        private const updateRefreshAngleSpeed:Number = 20;//刷新速度,单位:毫秒
        private const refreshAngleSpeed:Number = 0.01;//转换角度的速度
        private const zero:Number = 0.001;//自定义接近零的数据
        private const stageWidth:Number = 550;
        private const stageHeight:Number = 400;
        private var updateTimer:Timer = new Timer(updateSpeed);
        private var changeDirectTimer:Timer = new Timer(changeDirectSpeed);
        private var refreshAngleTimer:Timer = new Timer(updateRefreshAngleSpeed);//实现瓢虫转向缓动公式
        private var directAngle:Number;//瓢虫移动角度,单位:角度
        private var directRadin:Number;//瓢虫移动角度,单位:弧度
        private var myWidth:Number = 28;

        public function RandomAirPort():void {
            init();
        }
        private function init():void {
            changeDirectTimer.addEventListener(TimerEvent.TIMER, changeDirect);
            changeDirectTimer.start();
            updateTimer.addEventListener(TimerEvent.TIMER, airPortMove);
            updateTimer.start();
            refreshAngleTimer.addEventListener(TimerEvent.TIMER, refreshAngle);
            airWalkSpeed = getRandom(0.5,2);
        }
        private function changeDirect(evt:TimerEvent):void {
            getAngle();
            refreshAngleTimer.start();//开始转换角度,缓动效果
        }
        private function airPortMove(evt:TimerEvent):void {//瓢虫匀速运动
            this.x += airWalkSpeed*Math.cos(this.rotation*PI/180);
            this.y += airWalkSpeed*Math.sin(this.rotation*PI/180);
            if (this.x > (stageWidth+myWidth)) {
                this.x = 0;
            } else if (this.x < -myWidth) {
                this.x = stageWidth+myWidth;
            }
            if (this.y > (stageHeight+myWidth)) {
                this.y = 0;
            } else if (this.y < -myWidth) {
                this.y = stageHeight+myWidth;
            }
        }
        private function refreshAngle(evt:TimerEvent):void {
            var distOfAngle = Math.abs(directAngle - this.rotation);
            if (distOfAngle <= zero) {
                refreshAngleTimer.stop();
                this.rotation = directAngle;
            } else {
                var angleDist = refreshAngleSpeed*(directAngle - this.rotation);
                this.rotation += angleDist;
            }
        }
        private function getAngle() {
            directAngle = getRandom(-180,180);
            directRadin = directAngle*PI/180;
        }
        private function getRandom(startPara:Number,endPara:Number):Number {
            var R:Number = Math.random();
            var result:Number = startPara + R*(endPara - startPara);
            return result;
        }
    }
}

Flash动画:
 
视频教程列表
文章教程搜索
 
Flash AS推荐教程
Flash AS热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058