2013-02-17 3 views
0

J'ai précédemment signalé un problème dans SDL se plaindre que ma fonction renverrait toujours un null. J'ai eu une réponse à mon problème qui a définitivement résolu quelque chose, mais pas tout. Tel est le message: Tiling System C++ SDLSDL Tiling part 2

j'ajouté ce qui suit à mon dossier map.cpp:

//Make a temporary map to draw the tiles to 
Uint32 rmask, gmask, bmask, amask; 
if (SDL_BYTEORDER == SDL_BIG_ENDIAN) { 
    rmask = 0xff000000; 
    gmask = 0x00ff0000; 
    bmask = 0x0000ff00; 
    amask = 0x000000ff; 
} 
else { 
    rmask = 0x000000ff; 
    gmask = 0x0000ff00; 
    bmask = 0x00ff0000; 
    amask = 0xff000000; 
} 
SDL_Surface* temp_map = SDL_CreateRGBSurface(SDL_SWSURFACE, MAP_WIDTH, MAP_HEIGHT, 32, rmask, gmask, bmask, amask); 

Bien que l'image ne retourne plus nulle, ma fonction ne fonctionne toujours pas les tuiles sur l'image du tout. L'image reste complètement transparente.

Répondre

1

Votre code doit générer un test_map valide, voir SDL_CreateRGBSurface documenté here. Une chose à garder à l'esprit est que votre SDL_Rect dans apply_surface n'a pas toutes ses valeurs définies. SDL_Rect n'a pas de constructeur par défaut qui met à zéro la mémoire. Vous attribuez uniquement les x et y mais jamais les w et h, ce qui signifie que vos w et h contiendront des données erronées. Vous devez initialiser ces valeurs à w et h comme suggéré dans this example.

+0

Merci pour l'aide, je l'avais compris moi-même mais il ne me laisserait pas répondre à ma propre question pendant quelques heures et à ce moment-là j'avais oublié. Et merci pour le conseil! –