Lua移动表向上导致零值错误

时间:2017-02-04 23:11:26

标签: indexing lua null lua-table

我有一个表格,表示一个65 * 65的正方形网格,其中每个元素都是整数值。它代表一个演员周围的区域,演员可以在四个主要方向上移动,当他们这样做时,我需要桌子与它们一起移动,使它们保持在中心方格33,33。

而不是移动表的元素我改为有两个指针tableIndex.left和tableIndex.down分别存储底行最左列的索引,它们都从65开始。我有三个辅助函数对表进行操作,都取参数x1,x2,y1,y2,其中x1和y1是坐标,以启动函数at,x2和y2是坐标,以结束函数。

这些函数是tableInit,它在x1和x2之间的所有值中创建表。零表,用0填充指定范围内的所有条目,清除表将指定范围内的所有条目设置为nil。

function movetable(direction)
    --function to move our probability histogram 
    -- 0 is up, 1 is right, 2 is down, 3 is left
    --as a note robotSpeed = 1
    if direction == 0 then
        tableIndex.down += robotSpeed
        zerotable(tableIndex.left,tableIndex.left+64,tableIndex.down+64,tableIndex.down+64)
        cleartable(tableIndex.left,tableIndex.left+64,tableIndex.down-1,tableIndex.down-1)
    elseif direction == 1 then
        tableIndex.left += robotSpeed
        tableInit(tableIndex.left+64,tableIndex.left+64)
        zerotable(tableIndex.left+64,tableIndex.left+64,tableIndex.down,tableIndex.down+64)
        cleartable(tableIndex.left-1,tableIndex.left-1,tableIndex.down,tableIndex.down+64)
    elseif direction == 2 then
        tableIndex.down -= robotSpeed
        zerotable(tableIndex.left,tableIndex.left+64,tableIndex.down,tableIndex.down)
        cleartable(tableIndex.left,tableIndex.left+64,tableIndex.down+65,tableIndex.down+65)
    else
        tableIndex.left -= robotSpeed
        tableInit(tableIndex.left,tableIndex.left)
        zerotable(tableIndex.left,tableIndex.left,tableIndex.down,tableIndex.down+64)
        cleartable(tableIndex.left+65,tableIndex.left+65,tableIndex.down,tableIndex.down+64)
    end
end

该程序稍后在程序中调用,在下面的代码部分中,这是引发错误的地方"尝试对字段执行算术'?'零值。当i和j为0时会发生这种情况。这只发生在表最后一次向上移动之后,因此dir == 0并且如果我在dir == 0的情况下注释掉我的movetable函数中的cleartable调用,则错误不再存在。

for i=0,64 do
    for j=0,64 do
        --Robot is at 33 33 so we know there isnt an obstacle here
        if i ~= 32 and j ~= 32 then
            --This is the equation from the paper which tells us which direction the result is in
            local tan = atan2(i-33,j-33)+0.25
            if (tan > 1) tan = tan-1
            local dInD = flr(360*tan)
            --Our polar histogram has sectors ALPHA degrees wide, this rounds the direction down to a multiple of 
            --the sector size so we can use it as an index
            local dir = dInD - dInD%ALPHA
            polarHist[dir] += certaintyTable[tableIndex.left+i][tableIndex.down+j]
        end
    end

作为一个注释,我无法访问标准的lua库。

如果我做错了,这里是可以理解的

function cleartable(x1,x2,y1,y2)
    if x1 == x2 then
        for j=y1,y2 do
            certaintyTable[x1][j] = nil
        end
    elseif y1==y2 then
        for i=x1,x2 do
            certaintyTable[i][y1] = nil
        end
    else
        for i=x1,x2 do
            for j=y1,y2 do
                certaintyTable[i][j] = nil
            end
        end
    end
end

感谢您查看我的问题

0 个答案:

没有答案