Về cơ bản, tôi sẽ tạo một tilemap 2x2 trong đó các ô xảy ra là 512x512 và tất cả đều giống nhau. Cuộn qua nó như bình thường nhưng ngay sau khi X vượt quá 512 trừ 512 (hoặc thực hiện modulo 512 - nhưng hãy cẩn thận với các số âm), tương tự với Y. Vì vậy, thay vì một poly bạn vẽ 4, mặc dù chỉ có 1 hầu hết thời gian, nhưng trên các trường hợp viền, cả 4 đều có thể nhìn thấy (ví dụ khi bạn đi 400 xuống và 400 sang phải). Bằng cách này, nó sẽ di chuyển mãi mãi.
Tất nhiên bạn cũng có thể sử dụng 4 sprite thay vì tilemap. Một tại worldPos, một tại worldPos + (512,0), một tại worldPos + (0,512) và một tại worldPos + (512,512).
Hãy chắc chắn rằng worldPos luôn là modulo 512 và một lần nữa nó sẽ cuộn mãi mãi.
Đã chỉnh sửa để thêm một số mã:
Chưa được kiểm tra, không được kiểm tra cú pháp.
Rất cứng để giải quyết vấn đề này. Sẽ tốt hơn với một mảng thực tế cho bản đồ, nhưng đối với vấn đề cụ thể này, nó sẽ hoạt động.
Giả sử 0,0 là trên cùng bên trái của màn hình.
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);
}