循环索引创建的值不正确

我可能会忽略了一些简单的东西。

我正在循环遍历一个二维数组,在数组中的每个对象中赋值给变量。然而,当“j”增加时,gameArray [1] [1] .x的值从100更改为400,而在初始赋值之后不应更改。

-创建5x5的图块映射阵列
for i = 1,gridSize.x,1 do
    gameArray[i] = {}
    for j = 1,gridSize.y,1 do
        gameArray[i] [j] = tileArray [math.random(numTiles)]
        gameArray[i] [j] .x = (i * 100)
        gameArray[i] [j] .y = (j * 100)
        debug.debug()        
    end
end

tileArray [x]是一个包含4个整数和从PNG加载的love2D图像的对象。

--tUD
tileArray [1] .u = 1
tileArray [1] .r = 0
tileArray [1] .d = 1
tileArray [1] .l = 0
tileArray [1] .img = love.graphics.newImage('tiles/tUD.png'

以下是测试时的调试控制台副本:

lua_debug - >打印(gameArray [1] [1] .y)
100
lua_debug- > cont
lua_debug- > print(gameArray [1] [1] .y)
100
lua_debug- > cont
lua_debug- > print(gameArray [1] [1] .y)
100
lua_debug- > cont
lua_debug- > print(gameArray [1] [1] .y)
400
lua_debug- >

有什么想法是什么原因吗?

点赞
用户3337594
用户3337594

虽然由 David Bowling 编写的上述答案可行且代码优美,但它并没有解决原问题,因为复制的图瓦已经在修复过程中被防止了。

原问题是通过对表格使用浅拷贝函数进行修复的。这个函数从以下网站中借鉴而来:http://lua-users.org/wiki/CopyTable

将行更改为:

gameArray[i][j] = tileArray[math.random(numTiles)]

改为:

gameArray[i][j] = shallowcopy(tileArray[math.random(numTiles)])

将此作为第二个答案添加,以供任何遇到类似问题的人参考。

2017-02-25 12:56:13