Finally, I tried doing something similar but probably failed at it. I got it working with this code. Thanks for your hard work, I appreciate it. I have one more questions involving the camera. Since the code now works and draws the map around the character, how would I got by implementing the camera so the player stays on the middle of the screen at all times in my 800 x 600 windows. I thought of just going to my player render code and subtracting the offset the character was at it can stay in the middle, but that sounds like a dirty way.
const int minX = 0; const int maxX = map->GetHeight(); const int minY = 0; const int maxY = map->GetHeight(); const int showWidth = 15; const int showHeight = 13; //Starting point of tiles. int startX = (MapX / (TILE_SIZE * ZOOMSCALE) - (showWidth / 2)); if (startX <= 0) startX = 0; int startY = (MapY / (TILE_SIZE * ZOOMSCALE))- (showHeight / 2); if (startY <= 0) startY = 0; //Keep camera in bounds of the map. if(startX < minX) startX = minX; if((startX + showWidth) > maxX) startX = (maxX - showWidth); if(startY < minY) startX = minY; if((startY + showWidth) > maxY) startY = (maxY - showWidth); //Ending point of tiles. int endX = (startX + showWidth); int endY = (startY + showHeight);
I can keep the map on my screen by replacing the offset in my loop from:
offset2.x = x * TileZoom; offset2.y =y * TileZoom; offset2.w = TileZoom; offset2.h = TileZoom;
to
offset2.x = (x - startX) * TileZoom; offset2.y =(y - startY) * TileZoom; offset2.w = TileZoom; offset2.h = TileZoom;