ゲームの衝突に問題があります。ゲームは「タイルベース」です。プレイヤーがそこに入るのをブロックするはずのタイルを配置すると、問題が発生します。タイルに隣接する無限の垂直および水平バリアが生成されます。
これが私のコードです:
double d = delta;
Point oldVerticalPoint = new Point(point.getX(), point.getY());
if (Keyboard.isKeyDown(Keyboard.KEY_UP))
point.setY((float) (point.getY() - (speed * d)));
if (Keyboard.isKeyDown(Keyboard.KEY_DOWN))
point.setY((float) (point.getY() + (speed * d)));
for (int x = 1; x <= game.map.width; x++) {
for (int y = 1; y <= game.map.height; y++) {
Block block = game.map.getBlock(x, y);
if (block instanceof BlockWall) {
BlockWall b = (BlockWall) block;
Point blockPoint = Block.getStandardBlockCoords(x, y);
Point playerPoint = game.thePlayer.point;
if (playerPoint.getY() > blockPoint.getY() && playerPoint.getY() < <blockPoint.getY() + Block.LENGTH)
game.thePlayer.point = oldVerticalPoint;
}
}
}
Point oldHorizontalPoint = new Point(point.getX(), point.getY());;
if (Keyboard.isKeyDown(Keyboard.KEY_LEFT))
point.setX((float) (point.getX() - (speed * d)));
if (Keyboard.isKeyDown(Keyboard.KEY_RIGHT))
point.setX((float) (point.getX() + (speed * d)));
for (int x = 1; x <= game.map.width; x++) {
for (int y = 1; y <= game.map.height; y++) {
Block block = game.map.getBlock(x, y);
if (block instanceof BlockWall) {
BlockWall b = (BlockWall) block;
Point blockPoint = Block.getStandardBlockCoords(x, y);
Point playerPoint = game.thePlayer.point;
if (playerPoint.getX() > blockPoint.getX() && playerPoint.getX() < blockPoint.getX() + Block.LENGTH)
game.thePlayer.point = oldHorizontalPoint;
}
}
}
なぜこれを行うのかわかりません。明確にしておくべきことの 1 つは、2 つの衝突検出がある理由です。プレーヤーが水平方向に壁に向かって移動し、単純なタイルなどの上を垂直方向に移動している場合、プレーヤーの動きが完全に停止することはありません。getStandardBlockCoordsも使用されます。たとえば、ブロックxとyがx = 1とy = 2の場合、ブロックが 2 列目と 1 行目にあることを意味します。このメソッドは、これを単純にピクセル座標に変換します。
LWJGL と Slick2D を使用しています。ヘルプ?