Saya pada dasarnya akan membuat tilemap 2x2 di mana ubinnya berukuran 512x512 dan semuanya sama. Gulir melaluinya seperti biasa tetapi segera setelah X mendapatkan lebih dari 512 kurangi 512 (atau lakukan modulo 512 - tapi waspadalah terhadap angka negatif), sama untuk Y. Jadi, alih-alih satu poli Anda menggambar 4, meskipun hanya 1 yang akan terlihat sebagian besar waktu, tetapi pada kasus perbatasan semua 4 terlihat (ketika Anda turun 400 turun dan 400 ke kanan misalnya). Dengan cara ini akan bergulir selamanya.
Tentu saja Anda juga dapat menggunakan 4 sprite sebagai ganti tilemap. Satu di worldPos, satu di worldPos + (512,0), satu di worldPos + (0,512) dan satu di worldPos + (512,512).
Pastikan worldPos selalu modulo 512 dan sekali lagi itu harus bergulir selamanya.
Diedit untuk menambahkan beberapa kode: Tidak
diuji, tidak dicentang sintaks.
Sangat sulit dikodekan untuk menyelesaikan masalah ini. Akan lebih baik dengan larik yang sebenarnya untuk peta, tetapi untuk masalah khusus ini harusnya berfungsi.
Asumsikan 0,00 berada di kiri atas layar.
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);
}