2016-04-14 85 views
-1

最近我決定開始使用SDL 2.0 Visual Studio 2013製作2D遊戲。我創建了該窗口,但是當我嘗試加載png或jpg圖像時,它不起作用。我試圖改變代碼,但沒有任何工作。希望你們能幫助,非常感謝。無法使用SDL 2.0加載圖像

這裏是我的代碼:

SDL_Window* g_pWindow=0; 
SDL_Renderer* g_pRenderer=0 ; 


int main(int argc, char* args[]){ 

bool quit = false; 

SDL_Init(SDL_INIT_VIDEO); 

SDL_Window* window = NULL; 
window = SDL_CreateWindow("SDLGAME", 
    100, 100, 600, 400 
    , SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE 
    ); 

if (window== NULL){ 

    cout << "error. Window couldn't be created" << endl; 
    return 0; //close the program 
    } 

SDL_Renderer* renderer=NULL; 

renderer = SDL_CreateRenderer(window, -1,  SDL_RENDERER_SOFTWARE|SDL_RENDERER_ACCELERATED|SDL_RENDERER_TARGETTEXTURE); 

SDL_Event* MainEvent = new SDL_Event(); 


SDL_Texture *picture_image = NULL; 
picture_image = IMG_LoadTexture(renderer, "background.png"); 

SDL_Rect picture_rect; 

picture_rect.x = 10; 
picture_rect.y = 50; 
picture_rect.w = 250; 
picture_rect.h = 250; 

while (!quit && MainEvent->type != SDL_QUIT) 
{            
    SDL_PollEvent(MainEvent); 


    SDL_RenderCopy(renderer, picture_image, NULL, &picture_rect); 

    SDL_RenderClear(renderer); 

    SDL_RenderPresent(renderer); 
     } 

SDL_DestroyWindow(window); 
SDL_DestroyRenderer(renderer); 
delete MainEvent; 


return 0; 
} 
+0

SDL_Image需要你初始化它。使用'IMG_Init(IMG_INIT_JPG | IMG_INIT_PNG)'。看看是否有幫助! – Poriferous

回答

0

你應該叫SDL_RenderCopy前SDL_RenderClear()()。

下面的C代碼的工作:

#include <SDL.h> 
#include <SDL_image.h> 

int main(int argc, char* args[]){ 
    SDL_Init(SDL_INIT_VIDEO); 
    SDL_Window *window = SDL_CreateWindow("SDLGAME", 100, 100, 600, 400 , 0); 
    SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, 0); 
    SDL_Texture *picture_image = IMG_LoadTexture(renderer, "game.png"); 
    SDL_Rect picture_rect = {10,50,250,250}; 
    SDL_Event evt; 
    while(1) { 
     if(!SDL_PollEvent(&evt)) continue; 
     if(evt.type == SDL_QUIT) break; 
     SDL_RenderClear(renderer); 
     SDL_RenderCopy(renderer, picture_image, NULL, &picture_rect); 
     SDL_RenderPresent(renderer); 
    } 
    SDL_DestroyWindow(window); 
    SDL_DestroyRenderer(renderer); 
    return 0; 
}