私は現在Box2Dを使用していて、私のキャラクターはBox2Dのフィクスチャの集まりです。プレーヤーが落ちているかどうかを判断するために、Y位置の変化を検出することが適切かどうか疑問に思っていましたか?
私が考えていない他の方法があるのでしょうか?この種のことは通常どのように検出されますか?
私は現在Box2Dを使用していて、私のキャラクターはBox2Dのフィクスチャの集まりです。プレーヤーが落ちているかどうかを判断するために、Y位置の変化を検出することが適切かどうか疑問に思っていましたか?
私が考えていない他の方法があるのでしょうか?この種のことは通常どのように検出されますか?
回答:
次の2つのブール値を必要とし、isColidingWithGroundかつisJumping
ユーザーがジャンプボタンを押したときに、でisColidingWithGroundありtrue、かつisJumpingfalseの場合、jump()whichに設定isJumpingしてtrue
プレイヤーの場合はy速度が正、その後でisJumping等号false
プレーヤーが地面に触れている場合true、isColidingWithGroundはに等しく、それ以外のisColidingWithGround場合はに等しくなりfalseます。
最初のジャンプインパルス後もプレーヤーが地面に接触している場合があります。これらの2つのフラグを使用すると、ジャンプが押されたときにjump()が複数回呼び出されるのを防ぐことができます。
jump()もう一度呼び出します。
これを処理する方法は、各プレーヤーがisJumpingブール値を持ち、ジャンプしたときにに設定されることtrueです。彼らが表面に衝突するとき、私は彼らが飛び降りることができるものであるかどうか、そして彼らが平らに立っているかなどの他の規定があるかどうかをチェックし、それをに設定しfalseます。
次に、彼らがジャンプしようとしたときに、彼らが乗っている表面が良くてisJumping == false私が彼らにジャンプすることを許可しているなら、そうでなければ彼らはジャンプできない。これは、ジャンプしているかどうかを確認するたびに衝突を計算するよりも優れていると思います。
編集
@BlueRajaが下で指摘したように、ユーザーが端から離れた場合、isJumpingそれでもになりますfalse。これはContact ListenerのEndContactメソッドで修正できます(9.4 項Box2D docsを参照)。ワールドとの衝突が終了したときにisJumpingプロパティをtrueに設定するだけです。
isJumpingになりますがfalse、彼らはまだジャンプすることを許可されるべきではありません