返回“Flash基础理论课 - 目录”
轨道运动
最后看一个现实中的例子,我们来创建一个简单的行星系统,有太阳和地球。创建一个质量为10,000的太阳和一个质量为1的行星。接下来,让行星移开太阳一段距离,并给它一个垂直于太阳的速度。如图 12-3 所示。
图12-3 设置舞台
如果给出的质量,距离与速度都非常合适,那么就能让行星进入轨道。见文档类 Orbit.as。需要解释一下 init 中的代码,还有一点变化就是将numParticles 变量设为2。
private function init():void {
particles = new Array();
var sun:Ball = new Ball(100, 0xffff00);
sun.x = stage.stageWidth / 2;
sun.y = stage.stageHeight / 2;
sun.mass = 10000;
addChild(sun);
particles.push(sun);
var planet:Ball = new Ball(10, 0x00ff00);
planet.x = stage.stageWidth / 2 + 200;
planet.y = stage.stageHeight / 2;
planet.vy = 7;
planet.mass = 1;
addChild(planet);
particles.push(planet);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
再给大家一个例子,见 OrbitDraw.as,绘出一条轨道线,可以得到一些有趣的图案。
弹性运动
大家也许想用弹性运动作为另一种粒子引力。是的,弹性运动是我的最爱!回忆一下第八章做过的弹簧链及物体间弹性运动的例子。后面我们会看到更为广泛的应用,粒子间相互地进行弹性运动,就像万有引力中的那些程序。
灵感来源于Jared Tarbell 在www.levitated.net 中创作的 Node Garden [节点花园],如图 12-4 所示。总体思想是用一块区域包含某些节点(粒子),每个节点都会与相邻的节点发生交互,产生反作用力。这就是我的想法,用弹性运动作为反作用力。
图12-4 Jared Tarbell的 Node Garden