当前位置: 主页 > 网页制作 > Flash > FLASH AS3制作随机运动的瓢虫

FLASH AS3制作随机运动的瓢虫

时间:2010-1-11来源:互联网 点击:
所有随机运动的功能,都在瓢虫类(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;
        }
    }
}
站长资讯网
. TAG: FLASH AS3 随机运动 瓢虫
推荐内容最近更新人气排行
关于我们 | 友情链接 | 网址推荐 | 常用资讯 | 网站地图 | RSS | 留言