Platform game collisions with Block
- by Sri Harsha Chilakapati
I am trying to create a platform game and doing wrong collision detection with the blocks.
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;
}
}
}
}
The problem is that the object jumps well but does not fall when moved out of platform. Here's an image describing the problem.
I know I'm not checking underneath the object but I don't know how. The map is a list of objects and should I have to iterate over all the objects???
Thanks