我有一个数组tiles
,其中包含tileset中的tile。我还有一个15x10二维数组room
,其数字对应tiles
中的切片。我遇到的问题是:
room = { ... } -- 15x10 2d array
csv = require("csv") -- load a csv file, not relevant to the problem
file = csv.open("room/room-0.0.csv")
row = 1
for fields in file:lines() do
for col, val in ipairs(fields) do
room[row][col] = val
end
row = row + 1
end
-- room looks something like this:
-- { {1, 4, 2, 3, 2, ...},
-- ...
-- {3, 3, 2, 4, 2, ...} }
此时一切都很顺利。以下是出现问题的地方:
tiles = {"banana", "apple", "orange", "pitaya"}
for i, j in ipairs(room) do -- looping through room
print("-------")
for k, tilenum in ipairs(j) do -- tilenum = room[i][k]
print(tiles[tilenum]) -- tiles[room[k][i]]
end -- tiles[tilenum] == nil
end
输出:
-------
nil
nil
nil
nil
nil
...
会发生什么:
-------
banana
pitaya
apple
orange
apple
...
注意:虽然实际在tiles
中的对象不可打印,但我已尝试使用数字,字符串等示例。它们不起作用。
答案 0 :(得分:0)
您没有显示tilenum
的值,但我怀疑即使它是一个数字,它也是字符串形式,并且在索引Lua表时,"1"
索引与{不同{1}}索引(这可能是1
返回tiles[tilenum]
)的原因。
您需要检查分配的nil
值(稍后变为val
),如果它们确实是数字,则将tilenum
更改为= val
。