11.5.弹跳

问题
我想让物体弹跳起来
解决办法
使用Hooke's定律---弹簧算法
讨论
Hooke's定律描述了弹簧的运动规律,一般弹簧都有不同的弹力即弹簧所拥有的能量,或大或小,我们用_k变量表示弹簧能量的大小,设为0.1或0.2较好。

ActionScript的弹簧模型还需要个目标点作为物体的弹跳点,另外还需要设置一些阻尼系数,在真实世界里物体弹跳过程会慢慢失去能量,设置能量属性为0.95表示每次弹跳丢失5%的能量,直到物体停止跳动,下面的例子掩饰了弹簧的原理:
+展开
-ActionScript
package {
import flash.display.Sprite;
import flash.events.Event;
public class Spring extends Sprite {
private var _sprite:Sprite;
private var _vx:Number = 20;
private var _vy:Number = 0;
private var _k:Number = .1;
private var _damp:Number = .94;
private var _targetX:Number = 200;
private var _targetY:Number = 200;
public function Spring( ) {
_sprite = new Sprite( );
_sprite.graphics.beginFill(0x0000ff, 100);
_sprite.graphics.drawCircle(0, 0, 25);
_sprite.graphics.endFill( );
_sprite.x = 0;
_sprite.y = 0;
addChild(_sprite);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
public function onEnterFrame(event:Event):void {
var ax:Number = (_targetX - _sprite.x) * _k;
var ay:Number = (_targetY - _sprite.y) * _k;
_vx += ax;
_vy += ay;
_sprite.x += _vx;
_sprite.y += _vy;
_vx *= _damp;
_vy *= _damp;
}
}
}

把目标点改成鼠标坐标试试:
+展开
-ActionScript
var ax:Number = (mouseX - _sprite.x) * _k;
var ay:Number = (mouseY - _sprite.y) * _k;

加支付宝好友偷能量挖...


评论(0)网络
阅读(93)喜欢(0)flash/flex/fcs/AIR