[AS]バネの動きの考え方について
とりあえずよくわすれるからメモ
バネの動きについて
原則としては、
単位時間での、「目的位置」 – 「現在位置」を「加速度」と設定する。
この加速度でオブジェクトを動かせばそれはバネの動きとなる。
ステージにball_mcをおいた状態でのフレームアクション
簡単に書くと、
//初速度
var v0x:Number=0;
//速度
var vx:Number=0;
addEventListener(Event.ENTER_FRAME, entarFrameHandler);
vx=v0x;
function entarFrameHandler(e:Event):void {
//マウス位置とボールの位置の差を加速度とということにする
//つまりは目的位置 - 現在位置 を加速度にするということ。
//この加速度は毎フレームごとで当然変化する。
//良くわからんが、(目的位置 - 現在位置) で求めた加速度はバネの性質を持つ
var ax = mouseX - ball_mc.x;
//速度に加速度を単位時間毎に足すということ
vx += ax;
//位置に速度を単位時間毎に足すということ
//ここでの速度はマウス位置で変化
ball_mc.x+=vx;
}
ただしこれだと、バネは収束しないので二つのパラメータを設定して制御。
空気抵抗:1以下の数値を設定し、バネの収束する速度を調整
バネ定数:1以下の数値を設定し、バネの硬さを調整(小さい方が軟らかくなる)
//初速度
var v0x:Number=0;
//速度
var vx:Number=0;
//バネ定数(1以下、数値を上げるほど硬いバネ)
var spring:Number = 1;
//空気抵抗(数値を下げるほど、行ったり来たりが短く)
var friction:Number = 0.9
addEventListener(Event.ENTER_FRAME, entarFrameHandler);
vx=v0x;
function entarFrameHandler(e:Event):void {
//マウス位置とボールの位置の差を加速度とということにする
//つまりは目的位置 - 現在位置 を加速度にするということ。
//この加速度は毎フレームごとで当然変化する。
var ax = mouseX - ball_mc.x;
//加速度にバネ定数をかける
//良くわからんが、(目的位置 - 現在位置) * バネ定数で求めた加速度はバネの性質を持つ
//(目的位置 - 現在位置) (* バネ定数:かけなくてもバネっぽい動き)で求めた加速度、これを忘れないように。
ax = ax * spring
//速度に加速度を単位時間毎に足すということ
vx += ax;
//速度に空気抵抗かける
vx *= friction;
//位置に速度を単位時間毎に足すということ
//ここでの速度はマウス位置で変化
ball_mc.x+=vx;
}
Tweet