2013-12-10 55 views
1

我跟隨着this unity tutorial,但隨着腳本轉換爲UnityScript。將c#行中的這個多維數組定義轉換爲UnityScript for Unity

大部分情況都沒有問題,但是這條線引起了我的注意。

Color[][] tiles = new Color[numTilesPerRow*numRows][]; 

我相信我應該做這樣的事情,但它不工作。

var tiles = new Color[numTilesPerRow*numRows][]; 

我得到一個錯誤:

';' expected. Insert a semicolon at the end. 

編輯:

這裏是我完全轉換功能:

Color[][] function ChopUpTiles() { 
    int numTilesPerRow = terrainTiles.width/tileResolution; 
    int numRows = terrainTiles.height/tileResolution; 

    Color[][] tiles = new Color[numTilesPerRow*numRows][]; 

    for (int y=0; y<numRows; y++) { 
     for (int x=0; x<numTilesPerRow; x++) { 
      tiles[y*numTilesPerRow + x] = terrainTiles.GetPixels(x*tileResolution, y*tileResolution, tileResolution, tileResolution); 
     } 
    } 

    return tiles; 
} 

編輯2:

我已經弄清楚如何得到它Ø工作,但我得到一個沮喪的警告:

var tiles = new Array(); 

做工作,但問題是,我不知道在暗示,這是顏色數組的數組我得到一個沮喪的警告。

+0

那麼,根據我的答案的鏈接的信息,多維數組現在可以宣佈,但參差不齊的陣列仍下落不明。所以你堅持用C#編寫它們,或者根本不使用它們。無論如何,你爲什麼要用Javascript? C#得到了更好的支持,您可以使用Visual Studio,這非常棒:P另外,我還不確定,但似乎Unity將JS編譯爲.NET,因此主要關注語法。 – Luaan

+0

出於好奇,討論鋸齒狀數組的問題在哪裏?數組大小將始終爲'tiles [numTilesPerRow * numRows] [tileResolution * tileResolution]'。 – Jerdak

回答

1

鋸齒形數組在JavaScript中不能像這樣工作。

看一看這個解決方案:http://answers.unity3d.com/questions/54695/how-to-declare-and-initialize-multidimensional-arr.html

基本上,得到一個數組,然後每個指標的初始化到一個新的數組。

當然,如果它的靜態初始化,您可以使用這樣的事情:

[[1, 3, 4], [1, 5, 5], ... ] 

是否有一個原因,您使用的是交錯數組,而不是一個簡單的多維數組?

+0

你鏈接的例子與我所做的相反。無論我嘗試什麼,我總是得到一個錯誤或一個低調的警告。數組不是靜態初始化的,數據正從圖像紋理中剝離。我在編輯中包含了完整的C#代碼來解決我的問題。 – SystemicPlural

+0

@SystemicPlural在這種情況下,您可能不得不作弊 - http://wiki.unity3d.com/index.php?title=JavascriptMultiDimArrays。顯然,團結Javascript *只是不能做*。即使這樣也不會允許你返回數組,所以你仍然被搞砸了。我只是使用C#作爲這個小片段,你應該沒問題。 – Luaan

+0

Luaan,微軟因性能原因推薦在多維陣列上使用鋸齒狀陣列。例如,這[[warning]](http://msdn.microsoft.com/en-us/library/ms182277.aspx)和這[問題](http://stackoverflow.com/questions/597720/what-is多維數組和數組的陣列在c) –

0

我設法通過首先將顏色數組分配給一個變量來防止向下警告。不知道爲什麼這是可以接受的直接任務不是。

function ChopUpTiles() { 
    var numTilesPerRow = terrainTiles.width/tileResolution; 
    var numRows = terrainTiles.height/tileResolution; 

    var tiles = new Array(); 

    for(var y : int = 0; y < numRows; y++) { 
     for(var x : int = 0; x < numTilesPerRow; x++) { 
      var tileColors = terrainTiles.GetPixels(
       x*tileResolution, 
       y*tileResolution, 
       tileResolution, 
       tileResolution 
      ); 
      tiles[y*numTilesPerRow + x] = tileColors; 
     } 
    } 
    return tiles; 
}