衝突検出のコードは機能しますが、プレイヤーとモンスターの速度を 1 以上に設定するとすぐに奇妙な結果が得られます。これを解決するにはどうすればよいですか?
速度 1 の場合
速度 4 の場合
私の衝突検出:
static boolean collisionDown(Entity e)
{
for(Block i : Game.blocks)
{
Rectangle player = new Rectangle(e.getX(), e.getY() + e.getVelocity(), e.getWidth(), e.getHeight());
Rectangle block = new Rectangle(i.getX(), i.getY(), size, size );
if (player.intersects(block))
{
//e.goUp(1);
return true;
}
}
return false;
}
static boolean collisionUp(Entity e)
{
for(Block i : Game.blocks)
{
Rectangle player = new Rectangle(e.getX(), e.getY() - e.getVelocity(), e.getWidth(), e.getHeight());
Rectangle block = new Rectangle(i.getX(), i.getY(), size, size);
if (player.intersects(block))
{
return true;
}
}
return false;
}
static boolean collisionRight(Entity e)
{
for(Block i : Game.blocks)
{
Rectangle player = new Rectangle(e.getX() + e.getVelocity(), e.getY(), e.getWidth(), e.getHeight());
Rectangle block = new Rectangle(i.getX(), i.getY(), size, size);
if (player.intersects(block))
{
return true;
}
}
return false;
}
static boolean collisionLeft(Entity e)
{
for(Block i : Game.blocks)
{
Rectangle player = new Rectangle(e.getX() - e.getVelocity(), e.getY(), e.getWidth(), e.getHeight());
Rectangle block = new Rectangle(i.getX(), i.getY(), size, size);
if (player.intersects(block))
{
return true;
}
}
return false;
}
衝突検出を使用する場所
void goUp(int v)
{
if(!Block.collisionUp(this))
y -= v;
}
void goDown(int v)
{
if(!Block.collisionDown(this))
y += v;
}
void goRight(int v)
{
if(!Block.collisionRight(this))
x += v;
}
void goLeft(int v)
{
if(!Block.collisionLeft(this))
x -= v;
}
ありがとうございました