Box2Dボールを一定の高さにバウンドさせる


8

Doodle Jumpのようなゲームを作りたいです。私はlibgdxとBox2dを使用しています。ボールを常に同じ高さでバウンドさせる方法についてアドバイスが必要です。

ボールのボディ復元を1に設定して、常にジャンプできるようにしましたが、ブロックでジャンプすると、「インパルス」が小さくなります。また、衝突を検出してインパルスを加えようとしましたが、うまくいきませんでした。

毎回同じ高さにボールをバウンドさせるにはどうすればよいですか?


6
box2dを使用する代わりに、独自の「物理」を展開することを検討することをお勧めします。落書きジャンプのようなゲームでは、物理エンジンがなくても、それほど多くの作業を行う必要はありません。
jgallant 2013

回答:


15

ここに画像の説明を入力してください

ときにボール(赤軌道曲線)ヒット高いブロックを(青い四角形)、それがヒットしたときよりも遅く移動するダウン下部ブロックを(緑長方形)を。したがって、それが元の場所よりも跳ね返らない理由。

物理的には、これは理にかなっています。

Doodle Jumpは明らかに物理的に正確ではありません。衝突からの衝撃が常に同じであるDoodle Jumpのようなエフェクトが必要な場合は、衝突が発生するたびに、ball.speed.y = 7;または同様に、垂直速度を何らかの値に設定する必要があります。


2

Box2Dワールドはダンピングと摩擦を使用します。ワールドがシミュレーション時にオブジェクトにダンピングを適用している可能性があることを考慮してください。


1

また、このために物理エンジンを使用する必要がないかもしれないというミックスに投入したいと思います。ゲームの衝突の処理方法(具体的には、衝突応答)によっては、完全に制御できる非常に単純なバウンディングボックスシステムを作成できる場合があります。実際、「落書きジャンプ」スタイルのゲームではさらに簡単です。落書きジャンプのシナリオは、box2dで衝突を検出して衝突を無効にするかどうかを検討するのではなく(たとえば、プラットフォームを下からたたくなど)、落書きジャンプシナリオの方がはるかに単純です。ボールが「下降」している(yが減少している)場合、ボールがプラットフォームのy値を通過し、プラットフォームの左/右境界内にあると、衝突します。本当に「複雑な」唯一のことは、あなたがたどる放物線状の飛行経路です。http://en.wikipedia.org/wiki/Parabola#Equation_in_Cartesian_coordinates)。

応答を必要としない(ボーナスを押すなど)世界中の他のアイテムとの衝突は、境界ボックスだけで簡単に解決できます。

Box2Dは驚異的ですが、単純な要件がある場合、多くの場合、やり過ぎです。


0

ボールがプラットフォームに衝突する前の速度(float value = velocity.y)を覚えて、バウンド後に設定してください:ball.velocity.y = value *(-1)

たぶん、あなたはこの投稿を見るのが面白いでしょう:
最初の投稿
2番目の投稿

PSここではコードを送信できません。最後のコメントの「最初の投稿」をご覧ください。私が同様の問題を解決した方法のコードがあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.