2013-04-13 23 views
1

我正在使用Lua和Love2d編寫遊戲,但在處理嵌套表時遇到了阻礙。複製lua表時不匹配

我有一個函數,它貫穿一個包含與牆壁,按鈕等相對應的數字的表格,並根據這些鍵打印彩色塊。其中一個表格的示例如下所示:

map = { 
    { 1, 1, 1, 1, 1, 1, 1, 1, 1 } 
    { 1, 0, 0, 0, 0, 0, 0, 0, 1 } 
    { 1, 0, 1, 1, 2, 0, 0, 0, 1 } 
    { 1, 0, 0, 0, 0, 0, 0, 0, 1 } 
    { 1, 1, 1, 1, 1, 1, 1, 1, 1 } 
} 

這在渲染時正常工作。然而,當我嘗試使用功能,從一個文本文件中讀取這些數據看起來像這樣創建這個同桌:

111111111 
    100000001 
    101120001 
    100000001 
    111111111 

它創建了一個表格似乎相同的,但它只是當我嘗試不工作來渲染它。

所以我嘗試使用一些打印出表內容的代碼進行調試,儘管內容相同,但是描述嵌套表的十六進制位是不同的。例如:

看地圖文件的第一個嵌套表:

1 table: 0x106c5a720 
1 1 
2 1 
3 1 
4 1 
5 1 
6 1 
7 1 
8 1 
9 1 

讀手動創建表的第一嵌套表:

1 table: 0x106c64120 
1 1 
2 1 
3 1 
4 1 
5 1 
6 1 
7 1 
8 1 
9 1 

這是怎麼回事?這些值完全相同,但有些奇怪的事情正在發生。

編輯:這裏的代碼,使地圖以供參考位:

for y=1, #map do 
    for x=1, #map[y] do 
     if map[y][x] == 1 then 
     print("found a wall") 
     love.graphics.rectangle("fill", x * 30, y * 30, 30, 30) 
     elseif map[y][x] == 2 then 
     print("found a button") 
     love.graphics.setColor(255, 0, 0) 
     love.graphics.rectangle("fill", x * 30, y * 30, 30, 30) 
     love.graphics.setColor(0, 0, 255) 
     end 
    end 
end 
+0

你能說得更具體一些嗎?你有錯誤嗎?如果是這樣,什麼樣的錯誤?至於描述中的十六進制位,它是表的內存地址(我猜,或者可能是ID /散列),所以兩個不同的表將永遠不會共享相同的ID,儘管在內容方面是相同的。你有沒有嘗試用ipairs遍歷兩個表,看看它們確實是相同的? –

+0

啊!感謝您清理十六進制的東西!這解決了這個謎團。至於一個錯誤,我沒有得到。遊戲運行和一切,地圖只是不渲染。如果您想查看它,我添加了上面的渲染代碼。看起來「map [x] [y]」永遠不等於「1」。我嘗試打印出「map [x] [y]」,它肯定等於「1」多次,因爲它應該。另外當我按照你所提到的遍歷表時,它們看起來仍然是相同的。 – Refractix

+0

我懷疑問題在於你的文件閱讀程序。在閱讀文件時,您可以閱讀字符,即ASCII字符。所以當你測試一個元素時,元素是ASCII字符1,所以實際上它等於0x31,而不是1.嘗試在每個讀取字符上使用tonumber()。 –

回答

2

當從一個文本文件中讀取數據,你得到
在您原來的map表中您有號碼
數字不等於字符串。

assert(1 ~= '1') 
+0

謝謝!原來是這樣!你得出了和W.B.一樣的結論。以上。 – Refractix