Me respondo a mi mismo xD
el error era en esta linea : tileRect.y = (TileId / tileH) *tilesize;
donde debia ser : tileRect.y = (TileId / tileW) *tilesize;
PERO aun me queda un problema por si alguien me puede ayudar, como dibujar un mapa con tiles con espacio y margen.
Y tambien como ver el tema de las colisiones.
Bueno aca les dejo el codigo porsi las moscas
#include <TmxParser/Tmx.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
const short SCREEN_WIDTH = 555;
const short SCREEN_HEIGHT = 555;
const short DEPTH = 16;
int main() {
SDL_Surface* screen = NULL; /*pantalla*/
SDL_Init( SDL_INIT_VIDEO );
bool gameover = false;
SDL_Event event;
/*SDL_SWSURFACE Crea superficie de video en memoria de sistema*/
screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, DEPTH, SDL_SWSURFACE );
Tmx::Map *map = new Tmx::Map();
map->ParseFile("./example/untitled.tmx");
if (map->HasError()) {
printf("error code: %d\n", map->GetErrorCode());
printf("error text: %s\n", map->GetErrorText().c_str());
return map->GetErrorCode();
}
SDL_Rect tileRect;
SDL_Rect mapRect;
const Tmx::Tileset *tileset;
for (int i = 0; i < map->GetNumTilesets(); ++i) {
tileset = map->GetTileset(i);
if (tileset->GetTiles().size() > 0) {
// Get a tile from the tileset.
const Tmx::Tile *tile = *(tileset->GetTiles().begin());
}
}
SDL_Surface *Image = IMG_Load(tileset->GetImage()->GetSource().c_str());
int tilesize= tileset->GetTileWidth();
int img_W = tileset->GetImage()->GetWidth();
int img_H = tileset->GetImage()->GetHeight();
int tileW = img_W / tilesize;
int tileH = img_H / tilesize;
int tileMargin = tileset->GetMargin();
int tileSpace = tileset->GetSpacing();
int num_layers =map->GetNumLayers();
for (int i = 0; i <num_layers ; ++i) {
const Tmx::Layer *layer = map->GetLayer(i);
int map_ancho=layer->GetWidth();
int map_alto=layer->GetHeight();
for (int x = 0; x < map_ancho; x++) {
for (int y = 0; y < map_alto ; y++) {
int TileId = layer->GetTileId(x, y);
if(TileId==0){
TileId--;
continue;
}
tileRect.x = (TileId % tileW) *tilesize;
tileRect.y = (TileId / tileW) *tilesize;
tileRect.w= tilesize;
tileRect.h= tilesize;
mapRect.x= x* tilesize;
mapRect.y= y* tilesize;
SDL_BlitSurface( Image, &tileRect, screen, &mapRect );
SDL_UpdateRect(screen,0,0,0,0);
}
}
}
while(!gameover){
/* Verifica eventos */
if (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_QUIT:
gameover = true;
break;
case SDL_KEYDOWN:
switch (event.key.keysym.sym) {
case SDLK_ESCAPE:
case SDLK_q:
gameover = true;
break;
}
break;
}
}
}
return 0;
}
compilar en linux: g++ -o main TmxParser_Test.cpp -ltinyxml -lz -ltmxparser -lSDL -lSDL_image
Esta bastante desordenado y varias cosas se pueden optimizar pero lo hize para pruebas xD.