1

SDL を使用してモジュール設計のゲームを作成したいのですが、スプライトを表示できません。正確には、タイル セットを実装しようとしています。これは、1 つの PNG ファイルに収集された同じサイズのスプライトの束です (私の場合)。

私のデータ構造は、タイル セットで使用可能なスプライトの配列を保持する必要があります。これは、 のようなメソッドで描画できますdraw(Tile *, Position, Layer);

示されているように、後で複数の独立した背景レイヤーと前景レイヤーを実装するために、サーフェスの複数のレイヤーをフィーチャーしたいと考えています。同様に、定義済みの順序でscreenサーフェス ( で作成) にブリットされたレイヤーの配列があります。SDL_SetVideoMode

ただし、コードで何が問題になっているのかわかりません。タイル セットが読み込まれている間、次のスニペットのように、現在読み込まれているタイルをレイヤー サーフェスに正常にブリットできます。

this->graphic = SDL_CreateRGBSurface(SDL_HWSURFACE | SDL_SRCALPHA,
    tile_widths, tile_heights, bit_depth,
    rmask, gmask, bmask, amask);

SDL_BlitSurface(tileset_graphic, &tile_position, this->graphic, nullptr);
SDL_BlitSurface(tileset_graphic, &tile_position, 
    ((VideoController::get_instance())->layers)[0], &tile_position);

tileset_graphic最初の行では、スプライトに対応するの部分を、後で使用するために構造体SDL_Surface *によって保持されるにブリットしようとしています。Tile

ただし、このサーフェスを使用してレイヤーにブリットすることはできません。2 番目の (テスト) ステートメントは、考慮されている領域をtileset_graphicレイヤーの最下部にコピーするだけです。さらに、mainメソッドでいくつかのテスト コマンドを実行しました。

テスト中の私の発見:

  • ピースをレイヤーにブリットできtileset_graphic、正しく表示されます(上記を参照)
  • 画面に直接blitできます。Tile

    SDL_BlitSurface(
      tile->graphic,
      nullptr,
      (VideoController::the_instance)->screen,
      &relative_position);
    
  • ただし、レイヤーにブリットすることはできません。Tile

    SDL_BlitSurface(
      tile->graphic,
      nullptr,
      (VideoController::the_instance)->layers[0],
      &relative_position);
    

より正確には、テストのために全体tileset_graphicをblitし、このテストのために既に占有されている領域にa を blitすると、スプライトが部分的に表示されます。しかし、繰り返しになりますが、なぜそうなのかはまったくわかりません...Tile

概要:

いくつかの s を別の s にブリットしようとしましSDL_Surfaceたが、この (目的の) サーフェスのチェーンを試すだけで失敗するようです:

graphic --> layer --> screen

何がうまくいかないのか、またはあなたが必要とする追加情報を教えてくれる人はいますか?

編集

初期化された ( ) でのブリッティングを見つけることができましたSDL_CreateRGBSurfaceが、まだ「手つかずの」レイヤー サーフェスは何らかの形で失敗しているようです。SDL_FillRectタイルをレイヤーにブリットする前にレイヤー サーフェスで使用すると、正しく表示されます。ただし、この方法でレイヤーの透明度が失われています...

4

1 に答える 1

0

私は解決策を考え出しました。

私は自分のSDL_SRCALPHAフラグを明示的にリセットしなければなりませんでしたgraphic

SDL_SetAlpha(this->graphic, 0, SDL_ALPHA_OPAQUE );
于 2013-07-15T11:35:35.713 に答える