看了Flash大师Keith Peters的AS作品,为他的创意所折服。今天按照大师的创意制作了一个多目标点弹性的实例。舞台上有三个方块作为三个不同方向的弹性目标,这三个目标的位置是随机的。舞台上还有一个球,球和每个方块都被连起来了。每个方块都可以拖动。但我们拖得方块的时候,当我们拖得其中的一个方块,小球就会对小球施加了一个拉力,与此同时,另外两个会对小球施加一些相反的力,小球会在这几个力之间寻求一个平衡,可以说这个实例是对现实很好的模拟。
首先,使用for循环创建三个方块的实例,并方块实例位置的随机分配。
其次,创建小球的实例,并使用函数将小球和三个方块之间用线连起来,类似于松紧带。
最后,使用函数实现球弹性效果,我将这部分的代码加粗了。
package
{
import flash.display.<a href=http://www.flashabc.net/catalog.asptags=MovieClip>MovieClip</a>;
import flash.events.Event;
import flash.events.<a href=http://www.flashabc.net/catalog.asptags=MouseEvent>MouseEvent</a>;
import flash.geom.Rectangle;
import Ball;
public class Springmore extends MovieClip
{
var ball1:Ball;
var spring:<a href=http://www.flashabc.net/catalog.asptags=Number>Number</a> = .1;
var rects:<a href=http://www.flashabc.net/catalog.asptags=Array>Array</a>=new Array();
var fric:Number = .95;
public function Springmore()
{
init();
}
private function init():void
{
ball1=new Ball();
addChild(ball1);
ball1.x = ball1.y = 200;
//var rects=new Array()
for (var i:int=0; i<3; i++)
{
var rect:Rect=new Rect();
rect.x = <a href=http://www.flashabc.net/catalog.asptags=Math>Math</a>.random() * stage.stageWidth;
rect.y = Math.random() * stage.stageHeight;
addChild(rect);
rects.push(rect);
}
//trace(rects)
addEvent<a href=http://www.flashabc.net/catalog.asptags=List>List</a>ener(Event.ENTER_FRAME,onframe);
}
private function onframe(event:Event):void
{
addEventListener(MouseEvent.MOUSE_DOWN,ondown);
addEventListener(MouseEvent.MOUSE_UP,onup);
Spring();
line();
}
private function ondown(event:MouseEvent):void
{
event.target.startDrag();
}
private function onup(event:MouseEvent):void
{
removeEventListener(MouseEvent.MOUSE_DOWN,ondown);
event.target.stopDrag();
}
private function line()
{
graphics.clear();
graphics.lineStyle(1);
for (var i:int=0; i<3; i++)
{
graphics.moveTo(ball1.x,ball1.y);
graphics.lineTo(rects[i].x,rects[i].y);
}
}
<s>private function Spring()
{
for (var i:int=0; i<3; i++)
{
var rect:Rect = rects[i] as Rect;
var dx:Number = rect.x - ball1.x;
var dy:Number = rect.y - ball1.y;
ball1.vx += dx * spring;
ball1.vy += dy * spring;
}
ball1.vx *= fric;
ball1.vy *= fric;
ball1.x += ball1.vx;
ball1.y += ball1.vy;
}</s>
}
}