SFML community forums

Help => General => Topic started by: mbuckley2000 on December 22, 2013, 01:05:37 pm

Title: 2D Tile Based RPG Questions
Post by: mbuckley2000 on December 22, 2013, 01:05:37 pm
Hey,
I am developing a Tile Based 2D map editor for my game (Zelda style). So far, all is going well except I am noticing rather slow FPS in some scenarios. I have a few questions regarding this, and would appreciate any help :)

1. To store the sprites for each tile, I have been declaring an array like this in the globals:
sf::Sprite TileSprite[MaxXTiles][MaxYTiles][MaxZTiles];
My assumption with this was that this wouldnt slow down performance unless the sprites were being drawn, which only happens when they are textured. Is this a correct assumption to make? if not, should I be using another system such as dynamic arrays?

2. This is more of a general RPG game theory question.. At the moment, when a tile is selected from a tileset, that tile's texture rectangle, texture pointer and tileset filename are stored. When placed, I set the new tile's rectangle and texture equal to the one on the tileset. When saving, I save the rectangle and the tileset filename. Is this is the best way to do things? If not, how should I be doing it?

3. What is the usual way to save map data for this kind of game? I have seen other projects use XML, but I am unfamiliar with XML, so I am wondering whether it is viable to use the fstream commands included with C++?

Matt
Title: Re: 2D Tile Based RPG Questions
Post by: Nexus on December 22, 2013, 01:15:25 pm
1. Use sf::VertexArray instead of sf::Sprite. There is a SFML tutorial explaining exactly this use case. Furthermore, avoid global variables, you almost never need them. Create a TileMap class that stores the tiles.

2. It's one possible way, but you could also have an enum that refers to the different tilesets, and serialize that (either as int, or write a std::string conversion function).

3. There are loads of ways. Besides the traditional formats like XML or JSON, you can create your own binary or text format. You can use script languages such as Lua to store configuration data, or you can use serialization libraries like Google's protobuf or Boost.Serialize. For the beginning, I would keep it simple and create a text format that can be loaded and saved with std::fstream.
Title: Re: 2D Tile Based RPG Questions
Post by: mbuckley2000 on December 22, 2013, 01:25:51 pm
OK thanks that's very helpful :)