📜  如何在 C# 代码示例中制作块加载器

📅  最后修改于: 2022-03-11 14:48:58.185000             🧑  作者: Mango

代码示例2
public void CheckChunks()
    {
        int StartX = (int)Math.Floor(ScreenPosition.X / (ChunkSizeX * 16)) - 2;
        int StartY = (int)Math.Floor(ScreenPosition.Y / (ChunkSizeY * 16)) - 2;

        if (StartX < 0) StartX = 0;
        if (StartY < 0) StartY = 0;

        int EndX = (int)Math.Floor((ScreenPosition.X + GraphicsDevice.Viewport.Width) / (ChunkSizeX * 16)) + 2;
        int EndY = (int)Math.Floor((ScreenPosition.Y + GraphicsDevice.Viewport.Height) / (ChunkSizeY * 16)) + 2;
        if (EndX > MaxChunksX) EndX = MaxChunksX;
        if (EndY > MaxChunksY) EndY = MaxChunksY;

        for (int x = StartX; x < EndX; x++)
        {
            for (int y = StartY; y < EndY; y++)
            {
                if (WorldChunks[x, y] == null)
                {

                    LoadChunk(x, y, true);

                    if (WorldChunks[x, y] != null)
                    {

                        LoadedChunks.Add(WorldChunks[x, y]);
                    }
                     break;
                }

            }
        }

            foreach (Chunk cc in LoadedChunks)
            {

                if (cc.X < StartX  || cc.Y < StartY || cc.X >EndX || cc.Y > EndY)
                {
                    System.Diagnostics.Debug.WriteLine("Chunk to be unloaded..");
                    ChunkBuffer.Add(cc);
                    UnloadChunk(cc);

                }
            }

            foreach (Chunk c in ChunkBuffer)
            {
                LoadedChunks.Remove(c);
            }
        ChunkBuffer.Clear();

    }