目标偏移模拟
所谓目标偏移就是真正的弹簧在正常状态下的长度是不为0的,即弹簧在正常状态下总是有一定长度的。
1.构建小球精灵
package
{
import flash.display.Sprite;
public class Ball extends Sprite
{
public var radius:Number;
public var color:uint;
public var vx:Number=0;
public var vy:Number=0;
public function Ball (radius:Number,color:uint)
{
this.radius=radius;
this.color=color;
Init ();
}
public function Init ():void
{
graphics.beginFill (color);
graphics.drawCircle (0,0,radius);
graphics.endFill ();
}
}
}
package
{
import flash.display.Sprite;
import flash.events.Event;
public class OffsetSpring extends Sprite
{
private var ball:Ball;
private var friction:Number=0.8;
private var spring:Number=0.1;
private var springLength:Number=100;
public function OffsetSpring()
{
Init();
}
private function Init():void
{
ball=new Ball(20,0xFF0000);
addChild(ball);
addEventListener(Event.ENTER_FRAME,EnterFrame);
}
private function EnterFrame(e:Event):void
{
var dx:Number=ball.x-mouseX;
var dy:Number=ball.y-mouseY;
var angle:Number=Math.atan2(dy,dx);
var targetX:Number=mouseX+Math.cos(angle)*springLength;
var targetY:Number=mouseY+Math.sin(angle)*springLength;
ball.vx+=(targetX-ball.x)*spring;
ball.vy+=(targetY-ball.y)*spring;
ball.vx*=friction;
ball.vy*=friction;
ball.x+=ball.vx;
ball.y+=ball.vy;
graphics.clear();
graphics.lineStyle(1);
graphics.moveTo(ball.x,ball.y);
graphics.lineTo(mouseX,mouseY);
}
}
}

浙公网安备 33010602011771号