2017-05-04 4 views
0

Ich lerne C++ und SDL2 durch Programmierung eines klassischen Roguelike. Im Moment baue ich die Karte durch einen Teil eines tiles.png Bild wie dieses Rendering:C++ SDL2 wie einzelne Kacheln zu färben

tiles

Ich folgte lazyfoo's tiling tutorial und es funktioniert, aber ich möchte in der Lage sein, jede Kachel Hintergrund- und Vordergrundfarbe zu ändern. Ich kann die Farben der Textur ändern, indem ich etwas wie this other tutorial mache, aber was ist, wenn ich zum Beispiel eine braune Tür irgendwo und eine graue irgendwo anderswo möchte?

Was ist der beste Ansatz hier? Natürlich kann ich nicht Hunderte von Farbkombinationen in PNGs gespeichert haben. Soll ich für jede Kachel eine Textur erstellen oder gibt es einen besseren Weg?

Danke! :)

Antwort

1

SDL-2 bedeutet, dass Sie OpenGL zum Rendern von Kacheln verwenden. Verwenden Sie Misch- und Farbmaterialien. Verwenden Sie SDL_SetRenderDrawColor, SDL_SetRenderDrawBlendMode, SDL_SetTextureBlendModeSDL_SetTextureColorMod, SDL_SetTextureAlphaMod. Zum Beispiel gelbe Buchstaben zeichnen:

SDL_SetTextureColorMod(renderer, 255, 255, 0); 

Sie anderen Hintergrund zeichnen müssen Buchstaben mit Alpha-Kanal verwenden. Zuerst müssen Sie einen Hintergrund zeichnen, wo der Text erscheint, und dann den Text selbst zeichnen. Zum Beispiel:

//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 

Oder cheeting Version (wenn Sie Alpha-Blending verwenden möchten nicht):

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

Danke, das werde ich versuchen. Aber würde 'SDL_SetTextureColorMod' nicht die gesamte Textur beeinflussen? – JoePerkins

+0

Ja. Ganze Textur wird gelb. Eigentlich keine Textur, sondern die modulierende Farbe. Wenn Sie den getaggten Text (farbig) möchten, müssen Sie einen eigenen Text-Renderer schreiben, der die gewünschte Textfarbe definiert (z. B. durch Analysieren der Tags) und die Texturfarbe mit sdl_settexturecolormod ändern. Text ist nur die Fortsetzung farbiger Rechtecke mit unterschiedlichen Texturkoordinaten. – user3811082

+0

Ok, es hat funktioniert. Zuerst benutze ich 'SDL_SetRenderDrawColor' um den Kachelhintergrund zu setzen, dann benutze ich' SDL_RenderFillRect'. Mit 'SDL_SetTextureColorMod' setze ich die Vordergrundfarbe und abschließend mit' SDL_RenderCopy' und 'SDL_RenderPresent' alles rendern. – JoePerkins