2016-04-14 14 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; 
} 
関連する問題