Apa yang ingin Anda lakukan cukup umum. Untuk tutorial yang bagus tentang ini dan teknik umum lainnya, lihat seri mesin ubin ini .
Jika Anda belum pernah melakukan hal seperti ini sebelumnya, saya sarankan menonton serial ini. Namun, jika Anda mau, Anda bisa mendapatkan kode tutorial terakhir. Jika Anda melakukannya nanti, periksa metode menggambar.
Singkatnya, Anda harus menemukan poin min dan maks X / Y di sekitar pemain. Setelah Anda memilikinya, Anda hanya perlu mengulang masing-masing dan menggambar ubin itu.
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;
}
Seperti yang Anda lihat ada banyak hal yang terjadi. Anda memerlukan kamera yang akan membuat matriks Anda, Anda perlu mengubah lokasi piksel Anda saat ini ke indeks ubin, Anda menemukan titik min / maks Anda (saya menambahkan sedikit ke MAX saya sehingga sedikit menarik di luar layar terlihat sedikit ), dan kemudian Anda bisa menggambarnya.
Saya sangat menyarankan menonton seri tutorial. Dia membahas masalah Anda saat ini, cara membuat editor ubin, menjaga pemain dalam batas, animasi sprite, interaksi AI, dll ...
Di samping catatan TiledLib memiliki ini dibangun. Anda dapat mempelajari kode mereka juga.