我目前正在开发一个相对简单的平台游戏,它有一个奇怪的错误。你通过摔倒在地面上开始游戏(你在地面上产生了几个街区),但是当你降落时,你的脚就会被困在世界之内,直到你跳起来你都无法移动。这就是我的意思:
玩家的脚比地面低几个像素。但是,此问题仅发生在整个地图中的3个位置,并且仅发生在这3个选定位置。我假设问题出在我的碰撞检测代码中,但我不完全确定,因为当它发生时我没有收到错误。
public boolean isCollidingWithBlock(Point pt1, Point pt2) {
//Checks x
for(int x = (int) (this.x / Tile.tileSize); x < (int) (this.x / Tile.tileSize + 4); x++) {
//Checks y
for(int y = (int) (this.y / Tile.tileSize); y < (int) (this.y / Tile.tileSize + 4); y++) {
if(x >= 0 && y >= 0 && x < Component.dungeon.block.length && y < Component.dungeon.block[0].length) {
//If the block is not air
if(Component.dungeon.block[x][y].id != Tile.air) {
//If the player is in contact with point one or two on the block
if(Component.dungeon.block[x][y].contains(pt1) || Component.dungeon.block[x][y].contains(pt2)) {
//Checks for specific blocks
if(Component.dungeon.block[x][y].id == Tile.portalBlock) {
Component.isLevelDone = true;
}
if(Component.dungeon.block[x][y].id == Tile.spike) {
Health.health -= 1;
Component.isJumping = true;
if(Health.health == 0) {
Component.isDead = true;
}
}
return true;
}
}
}
}
}
return false;
}
我问的是如何解决问题。我已经查看了我的代码了很长一段时间,我不确定它有什么问题。另外,如果有更有效的方式进行碰撞检查,请告诉我!
我希望这是足够的信息,如果它不只是告诉我你需要什么,我一定会添加它。
谢谢!
答案 0 :(得分:0)
问题可能不是你的碰撞检查,而是你在碰撞时做什么的逻辑。你的角色落入了一直存在的区块中。所以它将无法跳跃(因为你在跳跃时检查碰撞我猜)。当你检查碰撞时,你必须通过预先检查和调整来确保你的角色不会陷入障碍。
if (will collide) {
put beside block
}
你可能正在做类似
的事情if (colliding) {
stop moving
}
当放在旁边时,你必须检查你正在移动的方向,并且不要移动到块中。