gpt4 book ai didi

java - 矩形碰撞检测系统不起作用

转载 作者:行者123 更新时间:2023-12-01 12:11:48 25 4
gpt4 key购买 nike

我为我正在开发的一个简单游戏制作了这个矩形碰撞系统,但它无法正常工作。它仅在玩家左下角像素与对象碰撞时记录碰撞,我不明白为什么。预先感谢您的帮助。

public static boolean collision(int playerX, int playerY, int playerWidth, int playerHeight,
int obstacleX, int obstacleY, int obstacleWidth, int obstacleHeight){

if (coordinateWithinRect(playerX, playerY, obstacleX,
obstacleY, obstacleWidth, obstacleHeight)) {
return true;
} else if (coordinateWithinRect(playerX - playerWidth,
playerY, obstacleX, obstacleY, obstacleWidth,
obstacleHeight)) {
return true;
} else if (coordinateWithinRect(playerX - playerWidth,
playerY + playerHeight, obstacleX, obstacleY,
obstacleWidth, obstacleHeight)) {
return true;
} else if (coordinateWithinRect(playerX, playerY
+ playerHeight, obstacleX, obstacleY, obstacleWidth,
obstacleHeight)) {
return true;
} else {
return false;
}
}


private static boolean coordinateWithinRect(int xCoord, int yCoord, int xRect, int yRect, int width, int height) {
if (xCoord > xRect && xCoord < (xRect + width) && yCoord < yRect && yCoord > (yRect - height)) {
return true;
} else {
return false;
}
}

最佳答案

在函数coordinateWithinRect中,您为障碍物指定宽度和高度,但不为玩家指定宽度和高度。这是故意的吗?我的意思是你的玩家没有任何维度或者它们不被认为重要?

无论如何,从碰撞定义的总体思路来看,我猜当玩家在障碍物的矩形内部时,就被认为与障碍物发生碰撞,对吗?所以,你应该检查是否

  • playerX 位于 obstacleX-obstacleWidth/2obstacleX+obstacleWidth/2 内,而
  • playerY 同时位于 obstacleY-obstacleHeight/2obstacleY+obstacleHeight/2 内。

你的函数应该是:

private static boolean coordinateWithinRect(int xPunkt, int yPunkt, int xRect, int yRect, int bredd, int höjd) {
if (playerX > (obstacleX-obstacleWidth/2) && playerX < (obstacleX+obstacleWidth/2) && playerY > (obstacleY-obstacleHeight/2) && playerY < (obstacleY+obstacleHeight/2)) {
return true;
} else {
return false;
}
}

您没有进行这些检查,所以确定您这里有问题还是我遗漏了什么?

关于java - 矩形碰撞检测系统不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27228183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com