0

Code::Blocks と SDL ライブラリを使用して、単純なコンピューター ゲームを作成しています。私はいくつかのチュートリアルに従っており、三目並べの機能的なゲームを作成しました。プロジェクトには具体的な指示はありませんでしたが、他のゲームで使用できるテンプレートを作成しました。そのテンプレートを使用して、ヨッシーが走っているイメージの新しいプロジェクトを作成しました。ただし、この新しいプロジェクトでは、ファイルを開く必要がある関数を使用すると、まったく機能しません。例えば:

if ( (Surf_Anim = CSurface::OnLoad("yoshi.bmp")) == NULL)
    return false;

yoshi.bmp が存在する場合でも常に false を返し、OnLoad 関数は Tic Tac Toe プロジェクトとまったく同じです。

実行可能ファイルの横に yoshi.bmp イメージのコピーを配置しましたが、それでも動作しません。(機能的な TicTacToe プロジェクトでは、画像はプロジェクトと同じディレクトリにありました)

私は何を間違っていますか?

編集: テキスト ファイルの操作が正しく機能することを確認した後、次のように CSurface::OnLoad 関数を編集しました。

SDL_Surface* CSurface::OnLoad(char* File)
{
  SDL_Surface* Surf_Temp = NULL;
  SDL_Surface* Surf_Return = NULL;

  if((Surf_Temp = SDL_LoadBMP(File)) == NULL)
    {
      return NULL;
    }

  printf ("Loafing worked\n");

  Surf_Return = SDL_DisplayFormat (Surf_Temp);
  SDL_FreeSurface(Surf_Temp);

  if (Surf_Return == NULL)
    printf ("SDL_DisplayFormat didn't\n");

  return Surf_Return;
}

両方の printf 関数が実行されました。この問題は、SDL 関数の使用方法に関係していると思われます。とにかく、完全に機能するプロジェクトですべてが同じ方法で行われました。画像 yoshi.bmp は、前述の作業プロジェクトのものと同様に、24 ビットカラーのビットマップです...

4

1 に答える 1

0

ビデオフレームバッファのピクセルフォーマットと色が以前にSDL_SetVideoMode関数を使って設定されていなかったため、DisplayFormat関数は機能しませんでした.

画像をロードする前にこの関数を呼び出すと、問題が解決しました。

于 2013-02-11T21:41:06.127 に答える