Hey guys, so I have a game I am developing which is a 2d sidescroller. I have an arraylist of all elements in the world and they have a location object attatched to each of them.
Each tile is 24 x 24 pixels, the character is 24 x 48 characters.
I have developed an object called “Location” which keeps track of all objects x and y’s.
For instance, I can say player.getLocation().getX() to get where it is on the X axis, same for Y.
I want the player to be able to move left, right, and jump. I have the jumping physics worked out, but collision detection is just being a pain.
Currently, in my Location class I have a class called overlaps(Location otherLoc), so I can say like
if(player.overlaps(elements.get(i).getLocation())
And loop through, brute force checking every single object on the screen and seeing if it overlaps.
My overlaps method is as follows, I beleive it is written wrong but I have written it about 4 times to I am a little fed up with it, maybe you can figure it out.
Note: Datastore.TILE_SIZE = 24.
public boolean overlaps(Location _toCompare)
{
if((((this.getX() >= _toCompare.getX()) &&
(this.getX() <= (_toCompare.getX() + Datastore.TILE_SIZE)) &&
(this.getY() <= (_toCompare.getY())) &&
(this.getY() >= (_toCompare.getY() + Datastore.TILE_SIZE)))) ||
(((this.getX() + Datastore.TILE_SIZE) >= (_toCompare.getX()) &&
(this.getX() + Datastore.TILE_SIZE) <= (_toCompare.getX() + Datastore.TILE_SIZE) &&
this.getY() <= (_toCompare.getY()) &&
this.getY() >= (_toCompare.getY() + Datastore.TILE_SIZE))) ||
((this.getX() >= _toCompare.getX() &&
this.getX() <= (_toCompare.getX() + Datastore.TILE_SIZE) &&
(this.getY() + Datastore.TILE_SIZE) >= (_toCompare.getY()) &&
(this.getY() + Datastore.TILE_SIZE) <= (_toCompare.getY() + Datastore.TILE_SIZE))) ||
(((this.getX() + Datastore.TILE_SIZE) >= _toCompare.getX() &&
(this.getX() + Datastore.TILE_SIZE) <= (_toCompare.getX() + Datastore.TILE_SIZE) &&
(this.getY() + Datastore.TILE_SIZE) >= (_toCompare.getY()) &&
(this.getY() + Datastore.TILE_SIZE) <= (_toCompare.getY() + Datastore.TILE_SIZE))))
{
return true;
} else {
return false;
}
}
/code]