回答:
基本的に、2x2タイルマップを作成しますが、タイルはたまたま512x512で、すべて同じです。通常と同じようにスクロールしますが、Xが512を超えるとすぐに512を減算します(または512を法として、負の数に注意してください)。Yと同じです。1つのポリゴンの代わりに4を描画すると、1つしか表示されません。ほとんどの場合ですが、ボーダーケースでは4つすべてが表示されます(たとえば、400を下に、400を右に移動した場合)。このように、それは永遠にスクロールするはずです。
もちろん、タイルマップの代わりに4つのスプライトを使用することもできます。1つはworldPos、もう1つはworldPos +(512,0)、1つはworldPos +(0,512)、もう1つはworldPos +(512,512)です。
worldPosが常に512を法とすることを確認してください。また、永久にスクロールするはずです。
いくつかのコードを追加するために編集:
未テスト、構文チェックなし。
この問題を解決するために非常にハードコードされています。マップの実際の配列の方が良いでしょうが、この特定の問題ではこれでうまくいくはずです。
画面の左上を0,0と想定します。
void DrawBG( int worldX, int worldY)
{
const int tileW = 512;
const int tileH = 320;
int worldXMod = worldX % tileW;
if (worldXMod < 0) worldXMod += tileW; // handle negative numbers
int worldYMod = worldY % tileH;
if (worldYMod < 0) worldYMod += tileH; // handle negative numbers
int tileLeft = -worldXMod;
int tileTop = -worldYMod;
int spriteTopLeftY = tileLeft;
int spriteTopLeftY = tileTop;
int spriteTopRightX = spriteTopLeftX + tileW;
int spriteTopRightY = spriteTopLeftY;
int spriteBottomLeftX = spriteTopLeftX;
int spriteBottomLeftY = spriteTopLeftY + TileH;
int spriteBottomRightX = spriteTopRightX;
int spriteBottomRightY = spriteBottomLeftY;
// whatever the syntax of sprite drawing or setting its position is...
DrawSprite(spriteTopLeftX, spriteTopLeftY);
DrawSprite(spriteTopRightX, spriteTopRightY);
DrawSprite(spriteBottomLeftX, spriteBottonLeftY);
DrawSprite(spriteBottomRightX, spriteBottomRightY);
}