2013-06-02 57 views
2

我只需要在屏幕上繪製圖塊以提高性能。什麼是可行的方法來做到這一點?等軸測圖,僅在屏幕上繪製圖塊

我試過這讓我關閉,但最終得到一個我似乎無法解決的錯誤。

//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行在屏幕上,但休息仍然顯示爲這張照片。

Isometric display problem

當移動相機,顯示不均勻,甚至,如果我移動少量突然降下所有的瓷磚顯示在畫面中消失,空白字符顯示之間/渲染開關瓷磚。如果我繼續移動,它會在這兩個狀態之間閃爍。我認爲它與(第2行)有關,但我似乎無法修復它。

我計算繪製瓷磚的方式似乎很好。當我縮小時我會得到這個(縮放並沒有改變公式)。在下面的圖片中,您可以看到第二個狀態以及正在繪製其他瓷磚的位置。

enter image description here

+0

顯然我有答案,甚至半小時後,我張貼此。 for循環按原樣繪製每個第一行或第二行。我需要爲tileX添加「+(row%2)」。 – Madmenyo

回答

2
tileX = sTileX + col + (int)((row/2) + (row%2)); 

模量修正它,因爲在每個第二行應在除了第一被增加一。

儘管如此,我仍然認爲這是有價值的信息,因爲我花了數小時才發現如何做到這一點,並最終自己做到了。我認爲這是繪製所有東西最有效的方法,因爲它允許將菱形等軸測圖繪製爲鋸齒形方形。