シンプルなポンゲームを実装しようとしています。ボールのどちら側が打たれたかに応じて、ボールを X 方向または Y 方向に変更したい。
ボールは毎秒 3 ピクセルで移動し、幅は 22、高さは 22 です。パドルの幅と高さは 32 です。
ボールの衝突検出では、長方形を 1 つ作成し、中心点との衝突をチェックするだけでよいですか?
別の方法として、ボールがフレームごとに 3 ピクセルで移動することを前提として、適切な幅で側面を表すためにボールの周りに 4 つの長方形を作成することもできます。
もう 1 つのオプションは、ボールの移動方向に少なくとも 2 ピクセルの衝突をチェックするメソッドを作成することです。
ボールが右に移動し、x 位置が 16 の場合、次のフレームは 19 になります。x の 16、17、18 をチェックするメソッドを作成して、衝突があるかどうかを確認する必要があります。右側を打って、ボールが実際に立方体の中に入らないようにしますか?
@シグ
私は今、これを衝突検出として持っています
if(Rect.intersects(balls.get(j).ball, levelBlocks.blocks.get(i).rect))
{
//Bottom
if(balls.get(j).yPos <= levelBlocks.blocks.get(i).yPos - (32/2))
{
balls.get(j).ySpeed = balls.get(j).ySpeed * -1;
}
//Top
if(balls.get(j).yPos >= levelBlocks.blocks.get(i).yPos + (32/2))
{
balls.get(j).ySpeed = balls.get(j).ySpeed * -1;
}
//Left
if(balls.get(j).xPos < levelBlocks.blocks.get(i).xPos)
{
balls.get(j).xSpeed = balls.get(j).xSpeed * -1;
}
//Right
if(balls.get(j).xPos > levelBlocks.blocks.get(i).xPos)
{
balls.get(j).xSpeed = balls.get(j).xSpeed * -1;
}
これは機能しますが、100% ではなく、まだ少しずれているようです。ボールが2つのブロックに同時に当たった場合、反転が反転するため、方向が再び戻ります。
その後、これに変更しました
if(Rect.intersects(balls.get(j).ball, levelBlocks.blocks.get(i).rect))
{
//Bottom
if(balls.get(j).yPos <= levelBlocks.blocks.get(i).yPos - (32/2))
{
collision = 2;
}
//Top
if(balls.get(j).yPos >= levelBlocks.blocks.get(i).yPos + (32/2))
{
collision = 2;
}
//Left
if(balls.get(j).xPos <= levelBlocks.blocks.get(i).xPos + (32/2))
{
collision = 1;
}
//Right
if(balls.get(j).xPos >= levelBlocks.blocks.get(i).xPos + (32/2))
{
collision = 1;
}
temp = levelBlocks.blocks.get(i);
levelBlocks.blocks.remove(i);
combo.blocksDestroied += 1;
Assets.score += 10 * combo.comboMultiplier;
}
}
if(collision == 1)
{
balls.get(j).xSpeed = balls.get(j).xSpeed * -1;
collision = 0;
}
if(collision == 2)
{
balls.get(j).ySpeed = balls.get(j).ySpeed * -1;
collision = 0;
}
これは機能しますが、時々、ボールがブロックをランダムに通過し始めます。見るのは非常に奇妙で、なぜそれをしているのか本当に混乱していますが、フレームあたり3ピクセルが原因だと感じています