2012-09-27 93 views
1

除了爲每個平鋪創建單獨的案例之外,更好的方法是什麼?如何創建平鋪系統

public void Draw(SpriteBatch spriteBatch, Level level) 
    { 
     for (int row = 0; row < level._intMap.GetLength(1); row++) { 
      for (int col = 0; col < level._intMap.GetLength(0); col++) { 
       switch (level._intMap[col, row]) { 
        case 0: 
         spriteBatch.Draw(_texture, new Rectangle(row * _tileWidth, col * _tileHeight, _tileWidth, _tileHeight), new Rectangle(0 * _tileWidth, 0 * _tileHeight, _tileWidth, _tileHeight), Color.White); 
         break; 
        case 1: 
         spriteBatch.Draw(_texture, new Rectangle(row * _tileWidth, col * _tileHeight, _tileWidth, _tileHeight), new Rectangle(1 * _tileWidth, 0 * _tileHeight, _tileWidth, _tileHeight), Color.White); 
         break; 
        case 2: 
         spriteBatch.Draw(_texture, new Rectangle(row * _tileWidth, col * _tileHeight, _tileWidth, _tileHeight), new Rectangle(2 * _tileWidth, 0 * _tileHeight, _tileWidth, _tileHeight), Color.White); 
         break; 
        case 3: 
         spriteBatch.Draw(_texture, new Rectangle(row * _tileWidth, col * _tileHeight, _tileWidth, _tileHeight), new Rectangle(3 * _tileWidth, 0 * _tileHeight, _tileWidth, _tileHeight), Color.White); 
         break; 

       } 
      } 
     } 
    } 

回答

6

不需要case語句,只需使用一個變量即可。

var n = level._intMap[col, row]; 
spriteBatch.Draw(_texture, 
    new Rectangle(row * _tileWidth, col * _tileHeight, _tileWidth, _tileHeight), 
    new Rectangle(n * _tileWidth, 0 * _tileHeight, _tileWidth, _tileHeight), Color.White 
); 

如果您需要限制輸出珍惜0-3(如case語句的作用),那麼最好使用條件if (n >= 0 && n <= 3) { }

1

我認爲做這樣的事情的一個好方法是做一個「瓷磚」類。該類可以具有紋理的Texture2D屬性。然後在Tile類中有一個繪製方法,它將在遊戲的繪製方法中調用。

您的Level類可以有一個Tiles數組而不是整數。

那麼你的繪圖調用將是這樣的:「瓷磚」

public void Draw(SpriteBatch spriteBatch, Level level) 
    { 
     for (int row = 0; row < level.tileMap.GetLength(1); row++) { 
      for (int col = 0; col < level.tileMap.GetLength(0); col++) { 
       level.tileMap[col, row].Draw(spriteBatch);; 
      } 

     } 
    } 
+0

的tileap是一個二維數組INT [,],我想一個位圖分成多個 –