I’m getting this error in platformer collisions. The Player jumps well but when he move out of platforms, he doesn’t fall. Here’s an image describing the situation.
Here’s my code.
// Variables
GTimer jump = new GTimer(1000);
boolean onground = true;
// The update method
public void update(long elapsedTime){
MapView.follow(this);
// Add the gravity
if (!onground && !jump.active){
setVelocityY(4);
}
// Jumping
if (isPressed(VK_SPACE) && onground){
jump.start();
setVelocityY(-4);
onground = false;
}
if (jump.action(elapsedTime)){
// jump expired
jump.stop();
}
// Horizontal movement
setVelocityX(0);
if (isPressed(VK_LEFT)){
setVelocityX(-4);
}
if (isPressed(VK_RIGHT)){
setVelocityX(4);
}
}
// The collision method
public void collision(GObject other){
if (other instanceof Block){
// Determine the horizontal distance between centers
float h_dist = Math.abs((other.getX() + other.getWidth()/2) - (getX() + getWidth()/2));
// Now the vertical distance
float v_dist = Math.abs((other.getY() + other.getHeight()/2) - (getY() + getHeight()/2));
// If h_dist > v_dist horizontal collision else vertical collision
if (h_dist > v_dist){
// Are we moving right?
if (getX()<other.getX()){
setX(other.getX()-getWidth());
}
// Are we moving left?
else if (getX()>other.getX()){
setX(other.getX()+other.getWidth());
}
} else {
// Are we moving up?
if (jump.active){
jump.stop();
}
// We are moving down
else {
setY(other.getY()-getHeight());
setVelocityY(0);
onground = true;
}
}
}
}
I know I’m not checking underneath the player but doing so (iterating through all the blocks) is making the player go in a bit and he comes to the platform.
Thanks