• time



    在线演示

    显示代码
     1 package {
     2     import flash.display.Sprite;
     3     import flash.events.Event;
     4     import flash.geom.Point;
     5 
     6     public class MouseAvoider extends Sprite {
     7 
     8         private const SPRING:Number=0.1;//弹性系数
     9         private const FRICTION:Number=0.9;//摩擦系数
    10         private const FEAR_DISTANCE:Number=150;//安全距离(小于该距离则发生躲避行为)
    11         private const MAX_AVOID_FORCE:uint=10;//最大躲避速度
    12 
    13         private var _destinationPoint:Point;//目标静止点(鼠标远离该物体时,物体最终会静止的坐标点)
    14         private var _speed:Point=new Point(0,0);//速度矢量(_speed.x即相当于vx,_speed.y即相当于vy)
    15 
    16         public function MouseAvoider():void {
    17             drawStuff();
    18         }
    19 
    20         private function drawStuff():void {
    21             //默认先画一个半径为10的圆
    22             graphics.beginFill(Math.random() * 0xFFFFFF);
    23             //graphics.beginFill(0xFFFFFF);
    24             graphics.drawCircle(005);
    25             graphics.endFill();
    26         }
    27 
    28         //只写属性(设置目标点)
    29         public function set destinationPoint(value:Point):void {
    30             _destinationPoint=value;
    31             addEventListener(Event.ENTER_FRAME, enterFrameHandler);
    32         }
    33         
    34         
    35         protected function enterFrameHandler(e:Event):void {
    36             moveToDestination();//先移动到目标点
    37             avoidMouse();//躲避鼠标
    38             applyFriction();//应用摩擦力
    39             updatePosition();//更新位置
    40         }
    41 
    42         //以弹性运动方式移动到目标点
    43         private function moveToDestination():void {
    44             _speed.x += (_destinationPoint.x - x) * SPRING;
    45             _speed.y += (_destinationPoint.y - y) * SPRING;
    46         }
    47 
    48         //躲避鼠标
    49         private function avoidMouse():void {
    50             var currentPosition:Point=new Point(x,y);//确定当前位置
    51             var mousePosition:Point=new Point(stage.mouseX,stage.mouseY);//确实鼠标位置
    52             var distance:uint=Point.distance(currentPosition,mousePosition);//计算鼠标与当前位置的距离
    53             
    54             //如果低于安全距离
    55             if (distance<FEAR_DISTANCE) {
    56                 var force:Number = (1 - distance / FEAR_DISTANCE) * MAX_AVOID_FORCE;//计算(每单位时间的)躲避距离--即躲避速率
    57                 var gamma:Number=Math.atan2(currentPosition.y- mousePosition.y,currentPosition.x- mousePosition.x);//计算鼠标所在位置与当前位置所成的夹角
    58                 
    59                 var avoidVector:Point=Point.polar(force,gamma);//将极坐标转换为普通(笛卡尔)坐标--其实相当于vx = force*Math.cos(gamma),vy = force*Math.sin(gamma)
    60                 
    61                 //加速 躲避逃开
    62                 _speed.x+=avoidVector.x;
    63                 _speed.y+=avoidVector.y;
    64             }
    65         }
    66         
    67         //应用摩擦力
    68         private function applyFriction():void {
    69 
    70             _speed.x*=FRICTION;
    71             _speed.y*=FRICTION;
    72         }
    73         
    74         //最终更新自身的位置
    75         private function updatePosition():void {
    76 
    77             x+=_speed.x;
    78             y+=_speed.y;
    79         }
    80 
    81     }
    82 }


    点击看大图

  • 相关阅读:
    Linux文件权限管理
    Linux用户权限管理
    压缩,解压缩 和tar详细介绍
    grep基本详细使用
    Vim文本编辑器详细用法
    Linux命令查找文件目录
    Linux文件增删改
    Linux目录管理
    Linux修改主机名
    Linux创建高级用户并删除
  • 原文地址:https://www.cnblogs.com/ddw1997/p/1789914.html
Copyright © 2020-2023  润新知