2017-05-04 1 views
0

저는 프로그래밍 언어로 roguelike을 프로그래밍하여 C++ 및 SDL2를 배우고 있습니다. 지금은 이것과 같은 tiles.png 이미지의 일부를 렌더링하여지도를 구축 : C++ SDL2 개별 타일의 색상을 지정하는 방법

tiles

나는 lazyfoo's tiling tutorial을 따라 그것은 작동하지만 각 타일의 배경과 전경 색상을 변경할 수 있도록하고 싶습니다. this other tutorial과 같은 것을 수행하면서 전체 텍스처 색상을 변경할 수는 있지만, 말하면 갈색 문을 어딘가에, 회색 문을 다른 곳에서 원한다면 어떻게할까요?

가장 좋은 방법은 무엇입니까? 분명히 PNG에 수백 가지 색상 조합을 저장할 수 없습니다. 타일마다 텍스처를 만들어야합니까? 아니면 더 좋은 방법이 있을까요?

감사합니다. :)

답변

1

SDL-2는 타일 렌더링에 OpenGL을 사용한다는 것을 의미합니다. 블렌딩 및 색상 재료를 사용하십시오. SDL_SetRenderDrawColor, SDL_SetRenderDrawBlendMode, SDL_SetTextureBlendModeSDL_SetTextureColorMod, SDL_SetTextureAlphaMod을 사용하십시오. 예를 들어 노란색 글자를 그리려면

SDL_SetTextureColorMod(renderer, 255, 255, 0); 

는 알파 채널과 문자를 사용할 필요가 다른 배경을 그립니다. 먼저 텍스트가 나타나는 배경을 그린 다음 텍스트 자체를 그려야합니다. 예를 들어 :

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

또는 cheeting 버전 (당신이 알파 블렌딩을 사용 싶지 않는 경우) :

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

감사합니다, 나는 그것을 시도 할 것이다. 하지만'SDL_SetTextureColorMod'가 전체 텍스처에 영향을 미치지 않을까요? – JoePerkins

+0

예. 전체 질감이 노란색이됩니다. 사실 짜임새가 아니라 조절 색. 태그가있는 텍스트 (컬러)를 원한다면 필요한 텍스트 색상을 정의하는 텍스트 렌더러를 작성하고 (아마도 태그 분석을 통해) sdl_settexturecolormod를 사용하여 텍스처 색상을 전환해야합니다. 텍스트는 텍스처 좌표가 다른 색상이있는 직사각형입니다. – user3811082

+0

좋습니다. 먼저'SDL_SetRenderDrawColor'를 사용하여 타일 배경을 설정 한 다음'SDL_RenderFillRect'를 사용합니다. 'SDL_SetTextureColorMod'를 사용하여 전경색을 설정하고 마지막으로'SDL_RenderCopy' 및'SDL_RenderPresent'를 사용하여 모든 것을 렌더링합니다. – JoePerkins

관련 문제