《flash MX编程与创意实现》这本书中还有其它例子,我个人只是觉得这个例子非常奇怪,最后运动方式竟然和真实的天体运方式几乎一至!也一个椭圆形的轨道,太不可思意了!
先简单介绍一下力驱动运动在flash中如何用actionscript来表现:作用于物体的力相加形成合力→ 合力产生加速度→ 加速度改变速度→ 速度改变位置。
1.计算合力:import Vector;
import mx.transitions.OnEnterFrameBeacon;
class gravitation {
static var __initBeacon = OnEnterFrameBeacon.init();
var obj:MovieClip;//受控对象
var pos:Vector;//起始位置
var vel:Vector;//初始速度
var anchor:Vector;//初始运动轨道中心
var G:Number;//引力常数
var netForce:Vector;//引力
function doForce():Void{
this.netForce = this.pos.minusNew (this.anchor);
var r = this.netForce.getLength();
this.netForce.setLength (-this.G / (r*r));
}
function move():Void{
this.vel.plus (this.netForce);
this.pos.plus (this.vel);
this.obj._x = this.pos.x;
this.obj._y = this.pos.y;
}
function setObj(o:MovieClip):Void {
this.obj = o;
}
function setPos(p:Vector):Void{
this.pos=p;
}
function setVel(v:Vector):Void{
this.vel=v;
}
function setAnchor(a:Vector):Void{
this.anchor=a;
}
function setG(g:Number):Void{
this.G=g;
}
function onEnterFrame (){
this.doForce();
this.move();
}
function resetAnchor(x:Number,y:Number) {
var z=new Vector(x,y);
this.setAnchor(z);
}
function gravitation(obj:MovieClip,pos:Vector,vel:Vector,anchor:Vector,G:Number){
this.setObj(obj);
this.setPos(pos);
this.setVel(vel);
this.setAnchor(anchor);
this.setG(G);
}
}
import gravitation;
import Vector;
var pos:Vector=new Vector(150,50);
var vel:Vector=new Vector(5,0);
var anchor:Vector=new Vector(250,180);
var abc:gravitation=new gravitation(ball,pos,vel,anchor,5000);
MovieClip.addListener(abc);
this.onMouseDown = function () {
abc.resetAnchor(this._xmouse,this._ymouse);
}
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。