hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
物理のおおまかな話/跳ねるボール - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

物理のおおまかな話

跳ねるボール

えーっと、ここでは「地面でバウンドするボール」の場合に限定しておきます。
ボールが地面にぶつかるとバウンドしますね。跳ねるたびに跳ね上がる高さが小さくなっていきます。

<法則>

  • 「ボールが地面にぶつかる直前の速度」と「バンドした直後のボールの速度」との関係は一定と考えてokです。

2つの関係はこんな感じになっています。

(バウンド後の速度)/(バウンド前の速度)=(跳ね返り係数)

この「跳ね返り係数反発係数)」というヤツは大きさが変化しない一定の値と考えてokです。
普通はこの跳ね返り係数は普通は

-1 < (跳ね返り係数) < 0

の範囲の値です。ボールが進む方向が逆になるので値はマイナスになります。
この範囲外にしてもいいのですが、値によって次のような動きをします。

0跳ねない。粘土を地面に落としたような状態。
-1より大0より小跳ねるたびに跳ね返る高さが小さくなっていく。
-1常に同じ高さまでボールが跳ねる。スーパーボール。
-1より小跳ねるたびに高さを増していく。



というわけで、バウンド後の速度を出すには次のような式になります。

(バウンド後の速度)=(跳ね返り係数)×(バウンド前の速度)

地面にぶつかったら速度にこの計算を当てはめてやればいいわけです。

ではサンプルをどぞ。

サンプルスクリプト

hsp2.png

+  バウンドサンプル for HSP2

[hsp3]

+  バウンドサンプル for HSP3



こうするのもよいのやもしれません。
計算は全て実数で行なう。またsqrtはマイナス値を計算できないので、マイナスが入るのを回避する。(これは計算を適度に切り上げる意味もある。) [hsp3]

+  バウンドサンプル for HSP3

物理演算

今回のポイント

	if py>400{	;地面衝突
		vy = stat * -4/5	;跳ね返り係数 -4/5
		if (-g<vy)&(vy<0) : vy = 0
		ay = 0
		py = 400
	}
  • y座標が400の場所を地面に見立てています。
  • 跳ね返り係数eは「-4/5」としています。
    • 跳ね返った後の速度が、前の速度と比べて4/5の大きさになり、マイナスなので反対方向に進むというわけです。
  • 適当な値以下になったら強制的にゼロにしています。
    if (-g<vy)&(vy<0) : vy = 0
    • 重力加速度gが2以上だとうまく0に集束しないので、適当な小さな値になったところで0にしています。

サンプルが動いたら、自分で改造していろいろと確かめてみてください。

  • 物体の位置が高くなるほど速度ベクトルの大きさ(長さのこと)が小さくなっているのは確認できましたでしょうか?
  • 加速度が与えられていない x方向では何もしないかぎり速度が変化しないのは分かりましたでしょうか。
  • 加速度を変えるとどうなりましたか?

サンプルの補足解説

速度を4/5倍し続けるわけですが、これでは実際は速度が0にたどり着くことはありません。
実数を使用する場合はある程度の大きさより小さくなったら0とみなす(v=0にしてしまう)処理をする必要があります。 今回は整数でのみ扱うので、加速度が1の場合は自動的に小数点以下が丸められて速度は0に集束しています。

添付ファイル:
fileb008.as
441件 [詳細]
fileb003.hsp
452件 [詳細]
fileb003.as
300件 [詳細]
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2010-10-09 (土) 10:37:37 (1156d)