SDL_Renderer에 약간의 문제가 있습니다. 왜 작동하지 않는지 나는 이해할 수 없다. 의이 예를 살펴 보자, 그것을 잘 작동합니다 :SDL_Renderer는 함수를 통과 한 후에 텍스처를 표시하지 않습니다.
bool running = true;
SDL_Window* window = SDL_CreateWindow("ASDF", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN);
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
SDL_Texture* texture = IMG_LoadTexture(renderer, "asdf.bmp");
SDL_Event event;
while(running)
{
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_KEYDOWN:
if(event.key.keysym.sym == SDLK_ESCAPE)
{
running = false;
}
break;
default:
break;
}
}
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, texture, NULL, NULL);
SDL_RenderPresent(renderer);
}
SDL_DestroyTexture(texture);
그 다음이 클래스에 와서 내가 기능을 통해 렌더러를 통과 할 때, 그것은 더 이상 작동하지 않습니다.
class Sprite
{
public:
Sprite(const std::string& path) : filePath(path) {};
~Sprite() { SDL_DestroyTexture(tex); };
void draw(SDL_Renderer* renderer);
private:
const std::string& filePath;
SDL_Texture* tex;
};
void Sprite::draw(SDL_Renderer* renderer)
{
printf("renderer sprite = %p\n", renderer);
tex = IMG_LoadTexture(renderer, filePath.c_str());
SDL_RenderCopy(renderer, tex, NULL, NULL);
}
int main(int argc, char **argv)
{
bool running = true;
SDL_Window* window = SDL_CreateWindow("ASDF", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN);
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
SDL_Event event;
Sprite* sprite = new Sprite("asdf.bmp");
while(running)
{
printf("renderer main = %p\n", renderer);
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_KEYDOWN:
if(event.key.keysym.sym == SDLK_ESCAPE)
{
running = false;
}
break;
default:
break;
}
}
SDL_RenderClear(renderer);
sprite->draw(renderer);
SDL_RenderPresent(renderer);
}
return 0;
}
렌더러의 주소는 주 기능과 그리기 기능에서 동일합니다. 나는 아마 여기 초보자가 실수를하고있는 것을 알고 있지만 그것을 발견 할 수는 없다.
원인인지는 모르겠지만 'sprite-> draw'를 호출 할 때마다 텍스처를 반복해서로드하고 있습니다. 생성자 또는 미디어를로드하는 함수에서 한 번 수행해야합니다. 방금로드 된 이미지이므로 렌더링 할 준비가되지 않았을 수 있습니다. – Zammalad
Zammalad 고맙습니다! 그게 효과가 있었어! – siwers
좋아, 답으로 써 줄게. – Zammalad