2017-05-04 1 views
0

j'apprends C++ et SDL2 en programmant un classique roguelike. En ce moment, je construis la carte en rendant une partie d'une image tiles.png comme celui-ci:C++ SDL2 comment la couleur des carreaux individuels

tiles

je suivais lazyfoo's tiling tutorial et il fonctionne, mais je voudrais être en mesure de changer chaque fond de carreaux et les couleurs de premier plan. Je peux changer les couleurs de la texture complète en faisant quelque chose comme this other tutorial, mais si je veux, disons, une porte marron quelque part et un gris ailleurs?

Ce qui est ici la meilleure approche? Évidemment, je ne peux pas avoir des centaines de combinaisons de couleurs stockées dans pngs. Devrais-je créer une texture pour chaque tuile, ou y a-t-il un meilleur moyen?

Merci! :)

Répondre

1

SDL-2 signifie que vous utilisez opengl pour rendre les tuiles. Utilisez des matériaux de mélange et de couleur. Utilisez SDL_SetRenderDrawColor, SDL_SetRenderDrawBlendMode, SDL_SetTextureBlendModeSDL_SetTextureColorMod, SDL_SetTextureAlphaMod. Par exemple, pour dessiner des lettres jaunes:

SDL_SetTextureColorMod(renderer, 255, 255, 0); 

pour dessiner différents arrière-plan, vous devez utiliser des lettres avec canal alpha. Vous devez d'abord dessiner l'arrière-plan où le texte apparaît, puis dessiner le texte lui-même. Par exemple:

//load surface with alpha-channel here 
SDL_SetRenderDrawColor(renderer, 0, 0, 255); //set blue background 
//draw rect for background here 
SDL_SetTextureColorMod(renderer, 255, 255, 0); //set yellow letters 
SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND); 
//draw text here 

ou une version cheeting (si vous ne voulez pas utiliser alpha-blending):

SDL_SetRenderDrawColor(renderer, 0, 0, 255); //set blue background 
//draw rect for background here 
SDL_SetTextureColorMod(renderer, 255, 255, 0); //set yellow letters 
SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_ADD); 
//draw text here 
+0

Merci, je vais essayer. Mais SDL_SetTextureColorMod ne serait-il pas affecté par la texture entière? – JoePerkins

+0

Oui. La texture entière devient jaune. En fait, pas la texture mais la couleur modulante. Si vous voulez le texte étiqueté (coloré) vous devez écrire votre propre moteur de rendu qui définira la couleur du texte dont vous avez besoin (peut-être en analysant les balises) et changer la couleur de la texture avec sdl_settexturecolormod. Le texte est juste la séquence de rectangles colorés avec des coeurs de texture différentes. – user3811082

+0

Ok, ça a marché. J'utilise d'abord 'SDL_SetRenderDrawColor' pour définir l'arrière-plan de la mosaïque, puis j'utilise' SDL_RenderFillRect'. Avec 'SDL_SetTextureColorMod' je règle la couleur de premier plan et finalement avec' SDL_RenderCopy' et 'SDL_RenderPresent' je rends tout. – JoePerkins