Básicamente, crearía un mapa de mosaicos de 2x2 donde los mosaicos son 512x512 y son todos iguales. Desplácese como lo haría normalmente, pero tan pronto como X supere 512 reste 512 (o haga un módulo 512, pero tenga cuidado con los números negativos), lo mismo para Y. Entonces, en lugar de un poli, dibuje 4, aunque solo 1 será visible la mayoría de las veces, pero en los casos fronterizos, los 4 son visibles (cuando baja 400 y 400 a la derecha, por ejemplo). De esta manera, debería desplazarse para siempre.
Por supuesto, también puede usar 4 sprites en lugar de un mapa de mosaico. Uno en worldPos, uno en worldPos + (512,0), uno en worldPos + (0,512) y uno en worldPos + (512,512).
Asegúrese de que worldPos sea siempre el módulo 512 y, de nuevo, debería desplazarse para siempre.
Editado para agregar un código:
probado, sin sintaxis comprobada.
Muy codificado para resolver este problema. Sería mejor con una matriz real para un mapa, pero para este problema específico esto debería funcionar.
Asume que 0,0 es la esquina superior izquierda de la pantalla.
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);
}