1

画像は正しく読み込まれているように見えますが、コンソール ウィンドウを SDL ディスプレイ上にドラッグしない限り、実際には表示されません。コンソール ウィンドウが重なっている SDL ディスプレイの部分だけが表示されるので、基本的にはコンソール ウィンドウを使用してイメージを「ペイント」し、その後はそのままにします。

#include "SDL.h"

class Game 

   private:
      SDL_Surface* displayWindow_;
//Rest of class

};

重要な機能は次のとおりです: (GetWallpaper() が有効なポインターを返すことに注意してください)

void Game::Render(){
   GameState* currentGameState = gameStateManager_->GetCurrentState();
   if(currentGameState)
   {
      surface::Draw(currentGameState->GetWallpaper(), displayWindow_, 0, 0);
      SDL_Flip(currentGameState->GetWallpaper());
   }
       return;
}

ついに

bool surface::Draw(SDL_Surface* sourceSurface, SDL_Surface* targetSurface,
                   int x, int y){
   if(sourceSurface == NULL || targetSurface == NULL)
      return false;

   SDL_Rect targetRectangle;

   targetRectangle.x = x;
   targetRectangle.y = y;

   SDL_BlitSurface(sourceSurface, NULL, targetSurface, &targetRectangle);

   return true;
}

誰でもこれに光を当てることができますか?

4

1 に答える 1

1

あなたのコードから判断すると、間違った表面を反転しています:

SDL_Flip(currentGameState->GetWallpaper());

SDL_Flip()現在のビデオ (ディスプレイ) サーフェスへのポインターを渡すことになっています。通常、これは への呼び出しから取得したものですSDL_SetVideoMode()。あなたの場合、それはdisplayWindow_.

余談ですが、観察した動作は、SDL_Flip() ドキュメントからのこの引用によって説明されています。

また、ウィンドウが重なったり、アイコン化された状態から復元されたりして、SDL ウィンドウの一部が再描画されると、ソフトウェア画面のサーフェスも自動的に更新されます。

于 2012-09-08T12:42:08.603 に答える