Platformer Collision Error [closed]
- by Connor
I am currently working on a relatively simple platform game that has an odd bug.You start the game by falling onto the ground (you spawn a few blocks above the ground), but when you land your feet get stuck INSIDE the world and you can't move until you jump. Here's what I mean:
The player's feet are a few pixels below the ground level. However, this problem only occurs in 3 places throughout the map and only in those 3 select places. I'm assuming that the problem lies within my collision detection code but I'm not entirely sure, as I don't get an error when it happens.
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;
}
What I'm asking is how I would fix the problem. I've looked over my code for quite a while and I'm not sure what's wrong with it. Also, if there's a more efficient way to do my collision checking then please let me know!
I hope that is enough information, if it's not just tell me what you need and I'll be sure to add it.
Thank you!
[EDIT] Jump code:
if(!isJumping && !isCollidingWithBlock(new Point((int) x + 2, (int) (y + height)), new Point((int) (x + width + 2), (int) (y + height)))) {
        y += fallSpeed;
//sY is the screen's Y.  The game is a side-scroller
        Component.sY += fallSpeed;
    } else {
        if(Component.isJumping) {
            isJumping = true;
        }
    }
if(isJumping) {
        if(!isCollidingWithBlock(new Point((int) x + 2, (int) y), new Point((int) (x + width + 2), (int) y))) {
            if(jumpCount >= jumpHeight) {
                isJumping = false;
                jumpCount = 0;
            } else {
                y -= jumpSpeed;
                Component.sY -= jumpSpeed;
                jumpCount += 1;
            }
        } else {
            isJumping = false;
            jumpCount = 0;
        }
    }