我正在嘗試創建一個2d滾動XNA遊戲作爲學習練習,但已遇到滾動背景的一些問題。我從文本文件中加載一個關卡,解析並創建適當的貼圖並將它們存儲在一個矩陣(tiles [,])中。如何確保只有在視口中可見的精靈有繪製
然後我有一個更新方法,它改變了瓷磚的位置,所以當它重新繪製它將會移動。
目前,我遍歷所有瓷磚以在移動之前繪製它們。這顯然不是非常有效的。理想情況下,我只想在屏幕上繪製圖塊。我可以通過採取視口,並用瓷磚的高度/寬度來確定多少瓷磚將適合通過這些瓷磚的畫面,只有環上做到這一點,如下所示:
private void DrawTiles(SpriteBatch spriteBatch)
{
float tileWidth = 40;
float tileHeight = 32;
for (int y = 0; y < (int)Math.Ceiling(mViewport.Height/tileHeight); ++y)
{
for (int x = 0; x < (int)Math.Ceiling(mViewport.Width/tileWidth); ++x)
{
tiles[x, y].Draw(spriteBatch);
}
}
}
然而,這僅僅繪製iles在原始視口中。即使他們的位置確實可見,外面的瓷磚也永遠不會被繪製出來。
我認爲這可以通過使用計數器來開始和結束循環,每次調用繪製方法時遞增它。但是,我不認爲這是一個很好的解決方案,但是我不能想到一個更好的方法來確保只有視口中的圖塊被繪製。
作爲一個側面說明,它是把你在你的循環已經得到了計算一個好主意,把它們放在變量中。這樣你就不會在循環的每一次迭代中進行額外的計算。 – craftworkgames