碰撞检测错误

时间:2012-10-12 17:47:22

标签: java

我目前正在开发一个相对简单的平台游戏,它有一个奇怪的错误。你通过摔倒在地面上开始游戏(你在地面上产生了几个街区),但是当你降落时,你的脚就会被困在世界之内,直到你跳起来你都无法移动。这就是我的意思:

http://i.imgur.com/IKLZY.png

玩家的脚比地面低几个像素。但是,此问题仅发生在整个地图中的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;
}

我问的是如何解决问题。我已经查看了我的代码了很长一段时间,我不确定它有什么问题。另外,如果有更有效的方式进行碰撞检查,请告诉我!

我希望这是足够的信息,如果它不只是告诉我你需要什么,我一定会添加它。

谢谢!

1 个答案:

答案 0 :(得分:0)

问题可能不是你的碰撞检查,而是你在碰撞时做什么的逻辑。你的角色落入了一直存在的区块中。所以它将无法跳跃(因为你在跳跃时检查碰撞我猜)。当你检查碰撞时,你必须通过预先检查和调整来确保你的角色不会陷入障碍。

if (will collide) {
    put beside block
}

你可能正在做类似

的事情
if (colliding) {
    stop moving
}

当放在旁边时,你必须检查你正在移动的方向,并且不要移动到块中。