重複の可能性:
Java長方形衝突検出の混乱
衝突検出で問題が発生しました。他のフォーラムで質問し、1か月間Googleを検索しました(誰も答えがありませんでした)。衝突検出に関する私の問題は、それが遅れているか不正確であるということです。完全に検出されることもあれば、途中で検出されることもあれば、まったく検出されないこともあります。一部の人々は、それが私の更新ループ(スイングタイマーを使用)とKeyInputの間の同期の問題であると言います。どう思いますか?
コード!:)
KeyInput:
public void keyPressed(KeyEvent e)
{
int key = e.getKeyCode();
if (key == KeyEvent.VK_D && walkRight == true)
{
Screen.movementX=-1;
}
else if (key == KeyEvent.VK_A && walkLeft == true)
{
Screen.movementX=1;
}
else if (key == KeyEvent.VK_S && walkDown == true)
{
Screen.movementY=-1;
}
else if (key == KeyEvent.VK_W && walkUp == true)
{
Screen.movementY=1;
}
if (key == KeyEvent.VK_D && walkRight == false)
{
Screen.movementX =0;
}
else if (key == KeyEvent.VK_A && walkLeft == false)
{
Screen.movementX=0;
}
else if (key == KeyEvent.VK_S && walkDown == false)
{
Screen.movementY=0;
}
else if (key == KeyEvent.VK_W && walkUp == false)
{
Screen.movementY=0;
}
}
public void keyReleased(KeyEvent e)
{
int key = e.getKeyCode();
if (key == KeyEvent.VK_D)
{
Screen.movementX=0;
}
else if (key == KeyEvent.VK_A)
{
Screen.movementX=0;
}
else if (key == KeyEvent.VK_S)
{
Screen.movementY=0;
}
else if (key == KeyEvent.VK_W)
{
Screen.movementY=0;
}
}
衝突:
public static void collision()
{
p.walkUp = true;
p.walkDown = true;
p.walkLeft = true;
p.walkRight = true;
for (int i = 0; i < wallTileArr.size(); i++)
{
wallTile = wallTileArr.get(i);
wallTile.collision(p);
}
}
と:
public void collision(Player p)
{
if (p.downGetBounds().intersects(getBounds()))
{
p.walkDown = false;
}
else if (p.upGetBounds().intersects(getBounds()))
{
p.walkUp = false;
}
else if (p.leftGetBounds().intersects(getBounds()))
{
p.walkLeft = false;
}
else if (p.rightGetBounds().intersects(getBounds()))
{
p.walkRight = false;
}
}
JPanelsの切り替え(メインメニューなどに使用)
public static void changePanelTo(Component add)
{
Main.f.getContentPane().invalidate();
Main.f.getContentPane().removeAll();
Main.f.add(add);
Main.f.validate();
add.requestFocusInWindow();
}
コードについてお気軽にご質問ください!
ダウンロード:ここをクリック