Hey, I've been trying to figure this out myself, but I'm having trouble figuring out an efficient way to handle this... I'm working on a platformer, and I can't figure out how to properly program collision with tiles. Currently, the game is programmed so that I have an array of different tiles to create the map with. Each tile is stored in a three-dimensional array like this: TILE[X,Y,TILE]. The player's position is also stored with four variables, PX, POF, PY, and POF. PX and PY hold the tile they are currently on, and POFX and POFY (Player OFfset) store the location of the tile they are on. So, for example, if you wanted to find the value of where the player is standing, you would check TILE like this:
IF TILE[POFX,POFY,MAP[PX,PY,0] != 0 THEN... 'THE 0 IN MAP IS THE MAP LAYER. OTHER LAYERS ARE USED FOR BG PLACEMENT, ENEMY PLACEMENT, ETC.
Also, I handle switching player position by saying that when POFX (or POFY) is >= 31 it gets 31 subtracted from it and PX (or PY) gets advanced by one, and basically the same thing in reverse for when it's less than 0. So, now that I have that explained, I have a couple questions.
1. How should I go about programming collision. I know it should be a DEF block, and I sort of have an idea on how to do it, but frankly I can't seem to think of a way to do it that doesn't seem way too complex for something so seemingly simple. Basically, my game is locked in at 60 FPS via VSYNC 1, so when PVX or PVY (Player Velocity) is greater than 1, the player is going to move more than 1 pixel, thus I need a function that every frame figures out the path the player is going to take between frames, and checks it for any obstacles. Also remember the function needs to not just stop when it hits something. For example, if the player has an X velocity of 8 and a Y velocity of 8, and it ens up hitting a vertical wall after travelling two pixels, the player should still be moved down the rest of the way, and only the X movement should be stopped.
2. Should I keep the game programmed the way I have it, with PX and POFX handled seperately, or would I be better off handling movement with a variable that keeps track of the player's exact location (PPX=79 [Player Precise] instead of PX=2 and POFX=15) and then simply divide that value by 32 and get the remainder each frame to fill in the values needed to find which tile the player is on and where they are on each tile. (PX=PPX/32 and POFX = the remainder)
Hopefully I describes the issue clearly. This is keeping me from continuing my program, and while I would have liked to have figured out a solution myself, I've decided it would be best at this point to ask for some help and advice. Thanks!