LibGDX と Box2D を使用して Pong を再作成しようとしています。2 つの問題があります。1 つを修正すると、別の問題が発生します。
パドルは現在キネマティックに設定されており、コントローラー クラスを介してアップ/ダウン キーを使用して制御されます。これは問題なく動作し、楽しく前後に再生できます。
問題は、私の壁は静的な物体であり、私のパドルはちょうどそれらを通り抜けます.
パドル本体を動的なものに変更するだけでこれを修正できます。これにより、パドルが壁を通過するのを防ぎますが、ボールがパドルに当たると、X 軸から外れて画面から飛び出します。
次のように、コントローラークラスに update メソッドを追加しようとしました。
public void update(float delta){
paddleBodyPosY = paddleBody.getPosition().x;
paddleBodyPosY = paddleBody.getPosition().y;
System.out.println(paddleBodyPosY);
}
コンソールは、画面の上から下まで、フレームごとに更新されるパドルの位置を報告します。
そこで、GameScreen クラスに戻り、次のように Render() メソッドであらゆる種類のコードを試しました。
if(playerOnePaddle.paddleBodyPosY < 0){
playerOnePaddle.paddleBody.getPosition().y = 0;
System.out.println("resetting paddle");
}
たくさんのバリエーションを試しましpaddleBody.setLinearVelocity(0,0)
たが、呼び出すことで動きを簡単に壊すことができますが、このように動かなくなり、動かなくなりました。明らかに問題は、ゲッターを使用して位置を設定できないという事実にあるに違いありません笑。
何か案は?さらにスニペットが必要な場合は、表示する必要のない100行のコードで質問を過負荷にしたくありませんでした:S.
パドルの作成方法:
public void createPaddle(World world, float x, float y){
//Define a body for the paddle
BodyDef paddleBodyDef = new BodyDef();
paddleBodyDef.type = BodyType.KinematicBody;
paddleBodyDef.position.set(x, y);
//Define a shape for the paddle
PolygonShape paddleShape = new PolygonShape();
paddleShape.setAsBox(paddleWidth, paddleHeight);
//Define a fixture for the paddle
FixtureDef paddleFixtureDef = new FixtureDef();
paddleFixtureDef.shape = paddleShape;
paddleFixtureDef.density = 0;
//Ensures ball bounces off paddle
//Consistently without losing velocity
paddleFixtureDef.restitution = 1.005f;
//Create the paddles
paddleBody = world.createBody(paddleBodyDef);
paddleFixture = paddleBody.createFixture(paddleFixtureDef);
paddleShape.dispose();
}