2013-11-26 3 views
1

죄송합니다. SDL 및 C++ 개발에 약간 미안합니다. 지금은 map.txt 파일에서 읽는 타일 맵퍼를 만들었습니다. 지금까지는 작동하지만지도를 지금 편집하고 싶습니다.실시간으로 텍스처 변경하기

SDL_Texture *texture; 
texture= IMG_LoadTexture(G_Renderer,"assets/tile_1.png"); 
SDL_RenderCopy(G_Renderer, texture, NULL, &destination); 
SDL_RenderPresent(G_Renderer); 

는 위의 내 타일을 보여주는있어 기본적인 방법이지만, 내가 가서 실시간으로 질감을 변경하려는 경우이 버그의 종류의 잘 작동하지 않습니다. 텍스처를 편집하는 데 가장 좋은 방법이 있습니까? 도움을 주셔서 감사합니다. 모든 것을 고맙게 생각합니다.

답변

1

가장 기본적인 방법은 반복적으로 사용할 일부 텍스처가있는 저장소 컨테이너를 설정하는 것입니다. 예를 들어 벡터 또는 사전 /지도. 예를 들어지도 방법을 사용하면 당신은 같은 것을 할 수있는 : 더있는가 될 수

SDL_RenderCopy(G_Renderer, myTextures["texture1"], NULL, &destination); 
SDL_RenderPresent(G_Renderer); 

: 다음 다른 질감을 활용하는

// remember to #include <map> 
map<string, SDL_Texture> myTextures; 
// assign using array-like notation: 
myTextures["texture1"] = IMG_LoadTexture(G_Renderer,"assets/tile_1.png"); 
myTextures["texture2"] = IMG_LoadTexture(G_Renderer,"assets/tile_2.png"); 
myTextures["texture3"] = IMG_LoadTexture(G_Renderer,"assets/tile_3.png"); 
myTextures["texture4"] = IMG_LoadTexture(G_Renderer,"assets/tile_4.png"); 

을, 당신이해야 할 모든이의 라인을 따라 뭔가를 사용하는 것입니다

textureName 당신이 실시간으로 코드를 변경할 수있는 문자열 변수입니다
SDL_RenderCopy(G_Renderer, myTextures[textureName], NULL, &destination); 

에 첫 번째 줄을 변경하여 제어.

이 방법을 사용하면지도 here.의 좋은 설명이 있습니다 :

렌더링 동안 파일 시스템에서 더로드가 없습니다 의미, 나중에 필요에 따라 손으로 전에 간단하게하는 것은 그들을 활용 필요한 모든 텍스처를로드 할 수 있다는 것을 의미합니다

이렇게하면 올바른 방향으로 전환 할 수 있기를 바랍니다. 자세한 정보가 필요한 경우 알려주십시오 :)