我只需要在屏幕上繪製圖塊以提高性能。什麼是可行的方法來做到這一點?等軸測圖,僅在屏幕上繪製圖塊
我試過這讓我關閉,但最終得到一個我似乎無法解決的錯誤。
//world position to start drawing from
int sPosX = (int)(cam.Position.X - (device.Viewport.Width/2));
int sPosY = (int)(cam.Position.Y - (device.Viewport.Height/2));
//tile position to start drawing from
int sTileX = (int)((sPosX + (2*sPosY) - (Map.TileWidth/2))/Map.TileWidth -1);
int sTileY = (int)((sPosX - (2 * sPosY) - (Map.TileHeight/2))/-Map.TileWidth - 1);
//amount of rows/collumns to draw
int rowCount = (int)(device.Viewport.Height/(Map.TileHeight/2) + 2);
int colCount = (int)(device.Viewport.Width/Map.TileWidth + 2);
//current tile to draw
int tileX;
int tileY;
for (int row = 0; row < rowCount; row++)
{
for (int col = 0; col < colCount; col++)
{
tileX = sTileX + col + (int)((row/2));
tileY = sTileY - col + (int)((row/2));
if (tileX >= 0 && tileX < tileMap.GetLength(0) && tileY >= 0 && tileY < tileMap.GetLength(1))
{
batch.Draw(grid, new Rectangle((tileX * (TileWidth/2)) - (tileY * (TileWidth/2)), (tileX * (TileHeight/2) + (tileY * (TileHeight/2))), TileWidth, TileHeight), Color.White);
batch.DrawString(tiny, tileX + "," + tileY, new Vector2(tileX * (TileWidth/2) - (tileY * (TileWidth/2)) + 24, tileX * (TileHeight/2) + (tileY * (TileHeight/2)) + 12), Color.White);
}
}
}
在這裏,我嘗試一行一行地繪製我的瓷磚地圖。首先我找出要繪製的第一個圖塊(左上角),然後找出需要繪製多少個列和多少行。
起初,我只使用浮動和投擲結束在最後一刻,同時轉換浮動一步一步詮釋我能夠得到完整的X = 0和完整的Y = 0行在屏幕上,但休息仍然顯示爲這張照片。
當移動相機,顯示不均勻,甚至,如果我移動少量突然降下所有的瓷磚顯示在畫面中消失,空白字符顯示之間/渲染開關瓷磚。如果我繼續移動,它會在這兩個狀態之間閃爍。我認爲它與(第2行)有關,但我似乎無法修復它。
我計算繪製瓷磚的方式似乎很好。當我縮小時我會得到這個(縮放並沒有改變公式)。在下面的圖片中,您可以看到第二個狀態以及正在繪製其他瓷磚的位置。
顯然我有答案,甚至半小時後,我張貼此。 for循環按原樣繪製每個第一行或第二行。我需要爲tileX添加「+(row%2)」。 – Madmenyo