複数のサーフェスを一度にブリットするSDL


10

レベルの背景のスプライトが512x512のチャンクに分割されるプラットフォームゲームを作成しようとしています。一度に3つのチャンクをメモリに保持し、3つすべてを画面に表示するコードを記述しようとしています。ここに私が持っている現在のコードがあります:

SDL_Rect where;
where.y = -game->camera->y;

where.x = -game->camera->x - MAP_WIDTH;
SDL_BlitSurface(left_chunk, NULL, screen, &where);

where.x = -game->camera->x;
SDL_BlitSurface(center_chunk, NULL, screen, &where);

where.x = -game->camera->x + MAP_WIDTH;
SDL_BlitSurface(right_chunk, NULL, screen, &where);

私が遭遇している問題は、最初にブリットされるチャンクのいずれかが表示される唯一のものであるということです。残りは画面に表示されません。問題はアルファ透明度に関係している可能性があると思いますが、チャンクがまったく重ならない場合でも、問題は解決されません。コードの他の部分では、文字や背景など、一度に複数の項目を画面に表示しますが、それらはすべて正しく表示されます。このコードの特定のセグメントは、この問題が発生している唯一の領域です。

スクリーンショット

left_chunkを点滅させる行をコメント化すると、次のように変わります。

後のスクリーンショット


計算されたX値によって、画像が画面の表示領域に配置されていることを確認しますか?
ザックザヒューマン

@ZackTheHuman画面はわずか300x175で、マップチャンクは512x512であるため、部分的に画面外にあります。最初は問題だったのかもしれませんが、画面に表示されているかどうかは、正しくレンダリングされているかどうかには関係ないようです。問題の説明に役立つスクリーンショットをアップロードできます。
外向性エンジン2012

1
SDLドキュメンテーションは、SDL_BlitSurfaceがブリット後に最終的な長方形をdstrectに保存することを述べています。各ブリットの後にwhere変数をリセットしてみましたか?
Asakeron、

@Asakeronそれでした!どこを変更するは予想ていませんでした。あなたはあなたのコメントを答えにするべきです!
外向性エンジン、

回答:


8

SDLドキュメンテーションは、SDL_BlitSurfaceがブリット後に最終的な長方形をdstrectに保存することを述べています。where変数をリセットすると、問題が修正されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.