Rending 2D Tile World (With Player In The Middle)
- by Mick
What I have at the moment is a series of data structures I'm using, and I would like to render the world onto the screen (just the visible parts).
I've actually already done this several times (lots of rewrites), but it's a bit buggy (rounding seems to make the screen jump ever so slightly every x tiles the player walks past).
Basically I've been confusing myself heavily on what I feel should be a pretty simple problem... so here I am asking for some help!
OK!
So I have a 50x50 array holding the tiles of the world.
I have the player position as 2 floats, x ([0, 49]) and y ([0, 49]) in that array.
I have the application size exactly in pixels (x and y).
I have an arbitrary TILE_SIZE static int (based on screen pixels).
What I think is heavily confusing me is using a 2d orthogonal projection in opengl which maps (0,0) to the top left of the screen and (SCREEN_SIZE_X, SCREEN_SIZE_Y) to the bottom right of the screen.
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
glu.gluOrtho2D(0, getActualWidth(), getActualHeight(), 0);
gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
The map tiles are set so that the (0,0) in the array is the bottom left.
And the player has to be in the middle on the screen (SCREEN_SIZE_X/2, SCREEN_SIZE_Y/2).
What I've been doing so far is trying to render 1-2 tiles more all around what would be displayed on the screen so that I don't have to worry about figuring out rendering half a tile from the top left, depending where the player is.
It seems like such an easy problem but after spending about 40+hours on it rewriting it many times I think I'm at a point where I just can't think clearly anymore...
Any help would be appreciated. It would be great if someone can provide some very basic pseudo code on keeping the player in the middle when your projection is mapped to screen coordinates and only rendering basically the tiles that you would be any be see.
Thanks!