Original Post
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 spritesheet
SDL_Surface *MCSFLoadMap(string source) {
SDL_Surface *spriteSheet = NULL;
spriteSheet = SDL_LoadBMP(source.c_str());
SDL_Surface *map = NULL;
map = MCSFLoadImage("BaseMap.bmp");
vector 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, ¤tTile);
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!
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 spritesheet
SDL_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 *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, ¤tTile);
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!