현재 다음과 같은 버튼 클래스를 만들려고합니다. 클래스를 사용하는 경우, 다음 작업을 수행 할SDL 이미지가 표시되지 않습니다.
void Button::apply_image(std::string path) {
SDL_Surface* loaded_image = NULL;
loaded_image = IMG_Load(path.c_str());
m_button_image = SDL_DisplayFormat(loaded_image);
SDL_FreeSurface(loaded_image);
}
void Button::show(SDL_Surface* screen) {
SDL_BlitSurface(m_button_image, NULL, screen, &m_box);
}
:
Button button1(0,0,50,50);
button1.apply_image("images/cards/1.png");
SDL_Surface* screen = NULL;
screen = SDL_SetVideoMode(640,480,32,SDL_SWSURFACE);
SDL_WM_SetCaption("House Of Cards", NULL);
button1.show(screen);
SDL_Flip(screen);
내가 SDL_DisplayFormat(loaded_image);
을 사용할 때 내 문제는 이미지가 표시되지 않고, 내가 그 라인과 SDL_FreeSurface(loaded_image);
제거 할 때. 그러면 loaded_image = IMG_load(path.c_str());
을 m_button_image = IMG_Load(path.c_str());
으로 변경하면 이미지가 표시됩니다. DisplayFormat()을 호출하지 않을 때 이미지가 표시되기 때문에 경로가 분명하기 때문에 잘못된 것이 있습니다. gdb를 사용하면 m_button_image가 NULL이고 gdb가 loaded_image가 SDL_Surface *를 가리키고 있기 때문에 왜 그런지 이해할 수 없습니다. http://sdl.beuc.net/sdl.wiki/SDL_DisplayFormat에서