Quello che vuoi fare è abbastanza comune. Per un bel tutorial su questa e altre tecniche comuni, dai un'occhiata a questa serie di motori per piastrelle .
Se non hai mai fatto nulla di simile prima, ti consiglio di guardare la serie. Tuttavia, se lo desideri, potresti ottenere l'ultimo codice tutorial. Se lo fai in seguito, controlla il metodo di disegno.
In poche parole, è necessario trovare i punti X / Y minimo e massimo intorno al giocatore. Una volta che hai che basta passare attraverso ciascuno di essi e disegnare quella tessera.
public override void Draw(GameTime gameTime)
{
Point min = currentMap.WorldPointToTileIndex(camera.Position);
Point max = currentMap.WorldPointToTileIndex( camera.Position +
new Vector2(
ScreenManager.Viewport.Width + currentMap.TileWidth,
ScreenManager.Viewport.Height + currentMap.TileHeight));
min.X = (int)Math.Max(min.X, 0);
min.Y = (int)Math.Max(min.Y, 0);
max.X = (int)Math.Min(max.X, currentMap.Width);
max.Y = (int)Math.Min(max.Y, currentMap.Height + 100);
ScreenManager.SpriteBatch.Begin(SpriteBlendMode.AlphaBlend
, SpriteSortMode.Immediate
, SaveStateMode.None
, camera.TransformMatrix);
for (int x = min.X; x < max.X; x++)
{
for (int y = min.Y; y < max.Y; y++)
{
Tile tile = Tiles[x, y];
if (tile == null)
continue;
Rectangle currentPos = new Rectangle(x * currentMap.TileWidth, y * currentMap.TileHeight, currentMap.TileWidth, currentMap.TileHeight);
ScreenManager.SpriteBatch.Draw(tile.Texture, currentPos, tile.Source, Color.White);
}
}
ScreenManager.SpriteBatch.End();
base.Draw(gameTime);
}
public Point WorldPointToTileIndex(Vector2 worldPoint)
{
worldPoint.X = MathHelper.Clamp(worldPoint.X, 0, Width * TileWidth);
worldPoint.Y = MathHelper.Clamp(worldPoint.Y, 0, Height * TileHeight);
Point p = new Point();
// simple conversion to tile indices
p.X = (int)Math.Floor(worldPoint.X / TileWidth);
p.Y = (int)Math.Floor(worldPoint.Y / TileWidth);
return p;
}
Come puoi vedere, stanno succedendo molte cose. Hai bisogno di una videocamera che creerà la tua matrice, devi convertire la tua posizione attuale dei pixel in un indice di tessera, trovi i tuoi punti min / max (aggiungo un po 'al mio MAX in modo che si sposti un po' oltre lo schermo visibile ), quindi puoi disegnarlo.
Consiglio davvero di guardare la serie di tutorial. Copre il tuo problema attuale, come creare un editor di tessere, mantenendo il giocatore entro i limiti, animando lo sprite, l'interazione AI, ecc ...
Su una nota a margine TiledLib ha questo integrato. Puoi studiare anche il loro codice.