สิ่งที่คุณต้องการทำเป็นเรื่องธรรมดา สำหรับบทแนะนำที่ดีเกี่ยวกับเรื่องนี้และเทคนิคทั่วไปอื่น ๆ ลองดูที่ชุดเอ็นจินไทล์ล์
หากคุณไม่เคยทำอะไรแบบนี้มาก่อนฉันแนะนำให้ดูซีรี่ส์ อย่างไรก็ตามหากคุณต้องการคุณสามารถรับรหัสบทช่วยสอนล่าสุดได้ หากคุณทำในภายหลังตรวจสอบวิธีการวาด
สรุปคุณจะต้องค้นหาจุดต่ำสุดและสูงสุด X / Y รอบ ๆ ผู้เล่น เมื่อคุณมีที่คุณเพิ่งวนผ่านแต่ละคนและวาดกระเบื้องนั้น
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;
}
อย่างที่คุณเห็นมีหลายอย่างเกิดขึ้น คุณต้องการกล้องที่จะสร้างเมทริกซ์ของคุณคุณต้องแปลงตำแหน่งพิกเซลปัจจุบันของคุณเป็นดัชนีย่อยคุณพบคะแนนต่ำสุด / สูงสุดของคุณ (ฉันเพิ่มเล็กน้อยถึง MAX ของฉันดังนั้นมันจึงวาดหน้าจอที่มองเห็นได้เล็กน้อย ) แล้วคุณสามารถวาดได้
ฉันขอแนะนำให้ดูชุดการสอน เขาครอบคลุมถึงปัญหาในปัจจุบันของคุณวิธีการสร้างตัวแก้ไขไทล์ทำให้ผู้เล่นอยู่ในขอบเขตแอนิเมชั่นสไปรต์การโต้ตอบของ AI และอื่น ๆ
ในบันทึกด้านข้างTiledLibมีสิ่งนี้ในตัวคุณสามารถศึกษารหัสได้เช่นกัน