1. ホーム
  2. c++

[解決済み] C++とSDL:SDL_Rectは具体的にどのように機能するのですか?

2022-02-11 01:27:11

質問

SDLに取り組んでいるのですが、読み込んだBMPの場所を設定しようとしたときに問題が発生しました。

以下はそのコードです。

while(event.type != SDL_QUIT) //The game loop that does everything
{
    SDL_Rect *location;
    location = SDL_Rect(600,400,0,0);
    SDL_PollEvent(&event); //This "polls" the event
    //Drawing stuff goes here
    SDL_BlitSurface(zombie, NULL, buffer, &location);
    SDL_Flip(buffer); //Draw
}

コンパイルされません。何が間違っているのでしょうか?

解決方法は?

SDLはC言語で書かれているので SDL_Rect は単なる構造体です。

これを動的に割り当てるには new という通常の関数の呼び出しとして解釈されます。 SDL_Rect を返します。 SDL_Rect* .
この場合、動的割り当てを使用する理由はありません。構造体の初期化構文を使用すればよいのです(構造体のメンバの宣言順序に注意してください)。

SDL_Rect location = {0,0,600,400}; // or
SDL_Rect location{0,0,600,400}; // for C++11 & up (h/t @HolyBlackCat)

または、構造体の各メンバーを明示的に初期化します(誰かが構造体のメンバーの順序を変更することを決めた場合に備えてより安全です)。

SDL_Rect location;
location.h = 600;
location.w = 400;
location.x = 0;
location.y = 0;