ActiinScript2.0 ボールアクション 重力、摩擦、跳ね返り係数
2011.11.04
この記事は最終更新日から1年以上が経過しています。
前回のActiinScript2.0 縦横移動 ボールを掴んで投げるの続きとなります。
最後によりボールの感じを出すために、重力、摩擦、跳ね返り係数について考えたいとおもいます。
跳ね返り係数
跳ね返り係数とはボールが壁に当たったとき、どのくらいの力で跳ね返すか?という値になります。
スーパーボールなどのボールの跳ね返り係数は100に近い数値になりますが、
ボーリング玉等の重く、跳ね返りが悪いボールの跳ね返り係数は0に近い数値となります。
ではどう設定するのかといいますと、今まで、壁に当たった時の計算は
speedX = speedX*-1;
と、符号を反転させるのみでしたが、これに跳ね返り係数を付け加えます。
壁にぶつかった時は80%の力で跳ね返すとすると、
speedX = speedX*-1*0.8;
このように0.8をかけると、壁にぶつかった時は80%の力で跳ね返します。
この設定を上下左右に設定すれば完成です。
空気抵抗
続いて空気抵抗について考えます。
現状、縦横と移動する計算式は
this._x += speedX; this._y += speedY;
この2行で求められていると思います。この式に少し付け加えます。
この2行の上に以下のスクリプトを追加します。
speedX = speedX*0.99; speedY = speedY*0.99;
このスクリプトを追加することによって、1%ずつスピードを減少させること、
つまり空気抵抗を付ける事ができます。
重力
最後に重力を付けます。難しいことは何もありません。
重力は常に下方向にかかっています。
座標で考えると、常にy座標にプラスの値が増加すればいいとなります。
speedY = speedY*0.99+0.98;
と先ほど空気抵抗を付けるための式に+0.98足せば完成です。
常に下方向へ行くようになります。
完成したscriptは以下の通りになります。
onClipEvent(load){
speedX = 10;
speedY = 8;
ballHold = 0;
}
onClipEvent(enterFrame){
if(ballHold == 1){
x1 = x2;
y1 = y2;
x2 = this._x;
y2 = this._y;
speedX = (x2-x1);
speedY = (y2-y1);
}else{
if (this._x>500-this._width/2){
this._x = 500-this._width/2;
speedX = speedX*-1*0.8;
}
if (this._x<0+this._width/2) {
this._x = 0+this._width/2;
speedX = speedX*-1*0.8;
}
if (this._y>400-this._width/2) {
this._y = 400-this._width/2;
speedY = speedY*-1*0.8;
}
if (this._y<0+this._width/2) {
this._y = 0+this._width/2;
speedY = speedY*-1*0.8;
}
speedX = speedX*0.99;
speedY = speedY*0.99+0.98;
this._x += speedX;
this._y += speedY;
}
}
on (press) {
ballHold = 1;
startDrag(this, true);
}
on (release) {
ballHold = 0;
stopDrag();
}

2011年11月現在、HTML5,css3に注目が行き、まったくFlashにはフューチャーされてなく
死語となりつつありますが(笑) 、
あえてFlashの記事を書いてみました。
値を変えて頂き使って頂ければと思ってます。
デモページ
デモページはこちらから














