- 1人でゲームが作れるように修行します。2
310 :名前は開発中のものです。[sage]:2011/09/12(月) 22:39:19.48 ID:Im+6OdM9 - 失礼ながら、無駄に複雑にしすぎてるような気がするね。
基本的にボールの状態変数は、(x,y,z)、(vx,vy,vz)だけあればいい。 それと便宜的に(接地 or浮いている)フラグをつけてもいい。 初期値はそれぞれ、ボールの初期位置、速度は0、フラグは'接地'状態。 ボールのループごとの処理はこんな感じ。 if(浮いている){ 垂直方向の重力加速度を速度に加算 速度を位置に加算 if(速度が下向きで垂直座標が地面より下){ 位置を地表に補正 垂直方向の速度に -0.9とか反発係数を配慮した値を掛ける 垂直速度が小さくなったら、'接地'状態とする } }else{ 水平方向の速度に0.99など転がり摩擦係数を意識した値を掛ける } 水平方向の速度を水平位置に加算 蹴った瞬間、(vx,vy,vz)に初速度を与え、'浮いている'状態にするだけ。
| - 1人でゲームが作れるように修行します。2
312 :名前は開発中のものです。[sage]:2011/09/12(月) 22:53:19.97 ID:Im+6OdM9 - ラインを割ったときには、その時点での(x,y,z)を控えておき、3秒間のカウンタを開始する。
その3秒間も、ボールのループごとの処理は継続する。 3秒たったら、控えておいた位置を復元するとともに、速度はゼロ、フラグは'接地'にセット スローインしたときは、初速度は違うかもしれないが蹴ったときと同様。 (x,y,z)の控えや3秒カウンタは、ボールとは別のメインのクラスなどで管理するといいと思う。
|
|