1

これはSDLの問題ですが、私が遭遇した問題はSDLに関連するものではなく、C++/ポインター全般に関連していると強く感じています。

簡単に言うと、このコードは機能しません(私が実際に行ったことを示すように編集されています)。

player->picture = IMG_Load("player");
SDL_BlitSurface(player->picture, NULL, screen, &pictureLocation);

画面に何も表示されません。ただし、このようにすると、次のように機能します。

SDL_Surface* picture = IMG_Load("player.png");
player->picture = picture;
SDL_BlitSurface(player->picture, NULL, screen, &pictureLocation);

私は小さな男がうまく見えます。

本当の問題は、Player::pictureを直接インスタンス化できないことです。やってみても

picture = IMG_Load("player.png")

player.cppでは、nullpointerになってしまいます。

4

3 に答える 3

3

私はとても愚かです。Player :: pictureにサーフェスを保存しようとするたびに、ファイル拡張子 ".png"を忘れたようになり、main.cppで宣言されたSDL_Surfaceでかき混ぜるたびに追加することを覚えておくと便利です。

ここでは本当にシンプルなものを見落としているような気がしましたが、これは恥ずかしいことです。これにふさわしい罰は何ですか?

于 2010-03-05T06:00:38.253 に答える
0

プレーヤー->画像とはどのようなデータ型ですか?IMG_Loadはどのタイプを返しますか?型変換が含まれない限り、一時変数に式を保存すると結果が変わるシナリオを思い付くのは非常に困難です。

そして、私はこのポインタのインスタンス化とは呼びません。ある画像タイプのインスタンスをインスタンス化し、それへのポインタを格納しています。

于 2010-03-05T05:43:44.983 に答える
0

これが、IMG_Load()が何を返すかを常に確認する必要がある理由です...

SDL_Surface* picture = IMG_Load("player.png");
if (picture == NULL) {
  // there was obviously some sort of error.
  // what does SDL_GetError() say?
}

一部のSDL関数は、エラーが発生した場合に-1を返します。ドキュメントをチェックして、関数の戻り値をチェックしていることを確認してください。これらの手順により、デバッグがはるかに簡単になります。

于 2010-03-05T19:17:25.823 に答える