私は現在Box2Dを使用していて、私のキャラクターはBox2Dのフィクスチャの集まりです。プレーヤーが落ちているかどうかを判断するために、Y位置の変化を検出することが適切かどうか疑問に思っていましたか?
私が考えていない他の方法があるのでしょうか?この種のことは通常どのように検出されますか?
私は現在Box2Dを使用していて、私のキャラクターはBox2Dのフィクスチャの集まりです。プレーヤーが落ちているかどうかを判断するために、Y位置の変化を検出することが適切かどうか疑問に思っていましたか?
私が考えていない他の方法があるのでしょうか?この種のことは通常どのように検出されますか?
回答:
次の2つのブール値を必要とし、isColidingWithGround
かつisJumping
ユーザーがジャンプボタンを押したときに、でisColidingWithGround
ありtrue
、かつisJumping
falseの場合、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
、彼らはまだジャンプすることを許可されるべきではありません