我正在使用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
你能說得更具體一些嗎?你有錯誤嗎?如果是這樣,什麼樣的錯誤?至於描述中的十六進制位,它是表的內存地址(我猜,或者可能是ID /散列),所以兩個不同的表將永遠不會共享相同的ID,儘管在內容方面是相同的。你有沒有嘗試用ipairs遍歷兩個表,看看它們確實是相同的? –
啊!感謝您清理十六進制的東西!這解決了這個謎團。至於一個錯誤,我沒有得到。遊戲運行和一切,地圖只是不渲染。如果您想查看它,我添加了上面的渲染代碼。看起來「map [x] [y]」永遠不等於「1」。我嘗試打印出「map [x] [y]」,它肯定等於「1」多次,因爲它應該。另外當我按照你所提到的遍歷表時,它們看起來仍然是相同的。 – Refractix
我懷疑問題在於你的文件閱讀程序。在閱讀文件時,您可以閱讀字符,即ASCII字符。所以當你測試一個元素時,元素是ASCII字符1,所以實際上它等於0x31,而不是1.嘗試在每個讀取字符上使用tonumber()。 –