【发布时间】:2013-04-06 04:25:18
【问题描述】:
我正在使用 Lua 和 Love2d 编写游戏,但在处理嵌套表时遇到了问题。
我有一个函数,它遍历包含与墙壁、按钮等对应的数字的表格,并根据键打印彩色块。这些表之一的示例如下所示:
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/hash),所以两个不同的表永远不会共享相同的 ID,尽管在内容方面是相同的。您是否尝试过使用 ipairs 遍历两个表以查看它们确实相同?
-
啊!感谢您清理十六进制的东西!解开了这个谜团。至于错误,我没有得到。游戏运行和一切,地图只是不渲染。如果你想看一下,我在上面添加了渲染代码。似乎“map[x][y]”永远不会等于“1”。我尝试打印出“map[x][y]”,它肯定等于“1”多次,因为它应该。此外,当我按照您提到的那样遍历表格时,它们看起来仍然相同。
-
我怀疑问题出在您的文件读取例程中。当您阅读文件时,您会阅读字符,即 ASCII 字符。所以当你测试一个元素时,这个元素是ASCII字符1,所以实际上它等于0x31,而不是1。尝试在每个读取的字符上使用tonumber()。
-
天哪!就是这样!非常感谢! :D
标签: lua nested compare hex lua-table