2017-04-23 12 views
0

ファイルパス全体を使用せずにファイルから画像をロードしようとしています。 C#のように、しかし、私がしようとすると、コンソールに画像がロードされると、私のSDLエラーがスローされます。ファイルからsdl_loadbmp全体のファイルパスを使用しない

bool loadMedia() 
    { 
    //Loading success flag 
    bool success = true; 

    //Load splash image 
    gHelloWorld = SDL_LoadBMP("SDL2_tutorials02/hello_world.bmp"); 
    if(gHelloWorld == NULL) 
    { 
     printf("Unable to load image %s! SDL Error: %s\n", "SDL2_tutorials02/hello_world.bmp", SDL_GetError()); 
     success = false; 
    } 

     return success; 
    } 

これは自分自身にSDLとC++ InternetAussieため

編集についての詳細を教えようと、私はオンラインチュートリアルから学んだ私の元のコードの一部ですが、これは私が私が何を考えてから、私の全体のソースコードです

//Using SDL and standard IO 
#include <SDL.h> 
#include <stdio.h> 

//Screen dimension constants 
const int SCREEN_WIDTH = 640; 
const int SCREEN_HEIGHT = 480; 

//Starts up SDL and creates window 
bool init(); 

//Loads media 
bool loadMedia(); 

//Frees media and shuts down SDL 
void close(); 

//The window we'll be rendering to 
SDL_Window* gWindow = NULL; 

//The surface contained by the window 
SDL_Surface* gScreenSurface = NULL; 

//The image we will load and show on the screen 
SDL_Surface* gHelloWorld = NULL; 

bool init() 
{ 
//Initialization flag 
bool success = true; 

//Initialize SDL 
if(SDL_Init(SDL_INIT_VIDEO) < 0) 
{ 
    printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError()); 
    success = false; 
} 
else 
{ 
    //Create window 
    gWindow = SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); 
    if(gWindow == NULL) 
    { 
     printf("Window could not be created! SDL_Error: %s\n", SDL_GetError()); 
     success = false; 
    } 
    else 
    { 
     //Get window surface 
     gScreenSurface = SDL_GetWindowSurface(gWindow); 
    } 
} 

return success; 
} 

bool loadMedia() 
{ 
//Loading success flag 
bool success = true; 

//Load splash image 
gHelloWorld = SDL_LoadBMP("SDL2_tutorials02/hello_world.bmp"); 
if(gHelloWorld == NULL) 
{ 
    printf("Unable to load image %s! SDL Error: %s\n", "SDL2_tutorials02/hello_world.bmp", SDL_GetError()); 
    success = false; 
} 

return success; 
} 

void close() 
{ 
//Deallocate surface 
SDL_FreeSurface(gHelloWorld); 
gHelloWorld = NULL; 

//Destroy window 
SDL_DestroyWindow(gWindow); 
gWindow = NULL; 

//Quit SDL subsystems 
SDL_Quit(); 
} 

int main(int argc, char* args[]) 
{ 
//Start up SDL and create window 
if(!init()) 
{ 
    printf("Failed to initialize!\n"); 
} 
else 
{ 
    //Load media 
    if(!loadMedia()) 
    { 
     printf("Failed to load media!\n"); 
    } 
    else 
    { 
     //Apply the image 
     SDL_BlitSurface(gHelloWorld, NULL, gScreenSurface, NULL); 

     //Update the surface 
     SDL_UpdateWindowSurface(gWindow); 

     //Wait two seconds 
     SDL_Delay(2000); 
    } 
} 
    //system halt for testing 
system("pause"); 

//Free resources and close SDL 
close(); 

return 0; 
} 

、それが助け場合、私は怠惰なFooの「プロダクションでチュートリアル1の手順に従っ:チュートリアルから学んだことは以下の通りです。私が適切に追加したいと思っているハイパーリンクは、Visual Studio 2010の最終版を使用してWindowsマシン上でsdlをセットアップする方法の手順をクリックした後のセットアップ部分です。私はエラーを出力ソースとしてコンソールを使ってシステム32のセットアップを行った。

+0

どのように実行ファイルを実行していますか?単独で実行する場合、通常、相対パスは包含ディレクトリから取得されます。それ以外の場合、作業ディレクトリは何でもかまいません。 – InternetAussie

+2

'getcwd()'と 'chdir()'と相対パスを一般的に読んでください。 –

+0

これが動作するかどうかを確認してください。 'SDL2_tutorials02'ディレクトリを実行可能ファイルと同じディレクトリに置きます。 IDE(実行ディレクトリを変更する)から実行する代わりに、エクスプローラで実行可能ファイルをダブルクリックします。うまくいけば助けてくれます。 – InternetAussie

答えて

1

InternetAussieはすでに、コンパイルされた実行可能ファイルを実行している場合、すべてのパスが実行ファイルが実行されるディレクトリからの相対パスであると言います。

あなたの問題はあなたのIDEに関係しているようです。 IDEからコードをビルドして実行すると、作業ディレクトリは他の場所から取得されます。これは、IDEがプログラムのデバッグバージョンをビルドするときのデフォルトパスです。それはすべての彼らのために異なるため正確に言うことは難しいです。

SDLプロジェクトをデバッグする場合は、コンパイラの作業ディレクトリを実行可能ファイルをコンパイルするディレクトリに設定し、読み込みたいファイルを保存する場所を設定する必要があります。

F.e。 : Visual Studioを使用している場合は、プロジェクト>設定>デバッグ>作業パスオプションを右クリックして設定することができます。また、cmakeでプロジェクトをビルドする場合は、SET_PROPERTY(TARGET Project_name PROPERTY VS_DEBUGGER_WORKING_DIRECTORY "path")で設定することもできます。

これで問題が解決しない場合は、お気軽に質問してください。また、cmakeとVSを使用している場合は、VisualStudioのSDL2プロジェクトを生成し、すべての必要な設定を行う完全なcmakelists.txtを提供することができます。

+0

VS2010 UltimateをインストールしたときにVisual Studioが作成したプロジェクトフォルダにあると仮定します。以前のC#のプログラムと同様に、.bmpイメージをprojectsフォルダの適切なプロジェクトに追加しました。 – SubZero

関連する問題