[ActionScript 3.0] AS3 弹性运动

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

[ActionScript 3.0] AS3 弹性运动的相关文章

[ActionScript 3.0] as3处理xml的功能和遍历节点

as3比as2处理xml的功能增强了N倍,获取或遍历节点非常之方便,类似于json对像的处理方式. XML 的一个强大功能是它能够通过文本字符的线性字符串提供复杂的嵌套数据.将数据加载到 XML 对象时,ActionScript 会分析数据并将其分层结构加载到内存(如果 XML 数据格式有误,它会发送运行时错误). 利用 XML 和 XMLList 对象的运算符和方法可以轻松遍历 XML 数据的结构. 1.读取外部 XML 文档 可以使用 URLLoader 类从 URL 加载 XML 数据.若

[ActionScript 3.0] AS3 深入理解Flash的安全沙箱Security Domains

简介 如果你还没有与复杂的的安全域(security domain)和应用程序域(application domain)问题打过交道,那么你真是个幸运的家伙.当你在加载外部内容(然后他们开始播放)的时候,默认的设置工作的很好,你甚至不知道他们的存在. 但是某些时候你可能需要控制默认设置以外的更多行为和功能,这样你就会遇到前面所说的问题.你也许会困扰于Security.allowDomain和crossdomain.xml文件的区别,又或者你想要深究关于安全性的最佳实践.如果是这样,那么这篇文章就

[ActionScript 3.0] AS3.0和AS2.0的相互通信

AS3和AS2之间的通信,最好的方式可能就是LocalConnection了. AS2向AS3发送数据,即AS2调用AS3的函数: as2.0代码(按钮上写的发送信息代码): on (release) { var param = "this message is from as2"; var caller:LocalConnection = new LocalConnection(); caller.send("AS2 send to AS3","funI

[ActionScript 3.0] AS3虚线绘制方法

import flash.geom.Point; import flash.display.MovieClip; import flash.display.Graphics; var mc:MovieClip=new MovieClip(); addChild(mc); drawDashed(mc,new Point(100,100),new Point(500,100),5,5); function drawDashed(mc:Sprite,p1:Point,p2:Point,length:N

[ActionScript 3.0] AS3 对XML的操作,创建、删除、增加节点方法

package { import flash.display.Sprite; /** * @author:Frost.Yen * @E-mail:[email protected] * @create: 2016-3-11 上午11:31:11 * */ public class OperateXML extends Sprite { private var _xml:XML = <data> <item>item1</item> <item>item2&l

[ActionScript 3.0] AS3.0 对象在一定范围随机显示不重叠

import flash.geom.Rectangle; import flash.display.MovieClip; import flash.display.Sprite; var arr:Array = []; var dis:Number = 20;//间距 var len:int=15;//对象数量 var bound:Rectangle = new Rectangle(0,0,1000,800);//显示范围 for(var i:int = 0;i<len;i++){ var ob

[ActionScript 3.0] AS3动画类Tweener中滤镜的运用

package { import caurina.transitions.Tweener; import caurina.transitions.properties.FilterShortcuts; import caurina.transitions.properties.TextShortcuts; import flash.display.Sprite; import flash.text.TextField; /** * @author: Frost.Yen * @E-mail: [e

[ActionScript 3.0] AS3 绘制立方体

1 package 2 { 3 import flash.display.Sprite; 4 import flash.events.Event; 5 import flash.geom.Vector3D; 6 import flash.text.TextField; 7 import flash.text.TextFormat; 8 9 /** 10 * @author Frost.Yen 11 * @E-mail [email protected] 12 * @create 2015-9-2

[ActionScript 3.0] AS3.0 水面波纹效果

import flash.geom.Point; import flash.display.BitmapData; import flash.filters.DisplacementMapFilter; import flash.display.MovieClip; import flash.events.Event; /** * 创建湖面微波效果 */ function createWater(target:MovieClip):void { var count:int = 1; var po