Jump to content

  • Log In with Google      Sign In   
  • Create Account

We're offering banner ads on our site from just $5!

1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


davinci28

Member Since 12 Nov 2012
Offline Last Active Nov 20 2012 07:11 PM

Topics I've Started

SDL Tiling Help

12 November 2012 - 09:57 PM

Hi all, I'm working on a simple RPG for an intermediate programming course (Sophomore, college), and have hit a bit of a snag. Usually I'd ask the instructor, but I'm not sure he has experience with SDL.

I've been resorting to Lazy Foo's tutorials, though I've done this function on my own. My goal is to feed the function a string for the spritemap source file, then return a completed map. My approach is to store every tile to a vector of surfaces, then apply the tiles individually to the map surface based on what tile the map file indicates.

As far as I can tell, all the files are being opened correctly, and are in the proper directory.

Right now everything compiles fine, but the returned map is just white (from the BaseMap.bmp). This is my first attempt at using SDL, and I'd like to get the graphics down before moving on to the rest of the game mechanics.

[source lang="cpp"]// Compiles map surface from map file and spritesheetSDL_Surface *MCSFLoadMap(string source) { SDL_Surface *spriteSheet = NULL; spriteSheet = SDL_LoadBMP(source.c_str()); SDL_Surface *map = NULL; map = MCSFLoadImage("BaseMap.bmp"); vector<SDL_Surface*> tileVector; SDL_Surface *tempSurface; for (int i = 0; i < SPRITES_PER_ROW; i++) { for (int j = 0; j < SPRITES_PER_COLUMN; j++) { Sint16 x = i * TILE_WIDTH; Sint16 y = j * TILE_HEIGHT; SDL_Rect currentTile = {x, y, TILE_WIDTH, TILE_HEIGHT}; MCSFApplySurface(0, 0, spriteSheet, tempSurface, &currentTile); tileVector.push_back(tempSurface); } } cout << tileVector.size() << endl; ifstream mapFile; mapFile.open("map1.map"); if (mapFile.is_open()) { int currentTileID = 0; mapFile >> currentTileID; int iMax = MAP_WIDTH / TILE_WIDTH; int jMax = MAP_HEIGHT / TILE_HEIGHT; for (int i = 0; i < iMax; i++) { for (int j = 0; j < jMax; j++) { MCSFApplySurface((i * TILE_WIDTH), (j * TILE_HEIGHT), tileVector[currentTileID], map); mapFile >> currentTileID; } } } else { cout << "File cannot be opened" << endl; } mapFile.close(); SDL_FreeSurface(spriteSheet); return map;}[/source]

Thanks for your help!

PARTNERS