Lua 表1.2:在超出边界的位置移除端部

Lua 表1.2:在超出边界的位置移除端部,lua,Lua,因此,我试图从数组中删除一个元素,但最终总是出现异常: bad argument #1 to 'remove' (position out of bounds) 代码如下: -- setup players players = {} for i=0, 3 do local gp = InputHandler:gamepad(i) if(gp:isConnected()) then logMessage(i .. "

因此,我试图从数组中删除一个元素,但最终总是出现异常:

bad argument #1 to 'remove' (position out of bounds)
代码如下:

    -- setup players
    players = {}
    for i=0, 3 do
        local gp = InputHandler:gamepad(i)
        if(gp:isConnected()) then
            logMessage(i .. " is connected")
            players[i] = createCharacter(i, gp)
        end
    end

-- ....

-- update players
for k, player in pairs(players) do
    logMessage("player index: " .. k)

    -- if update returns false, the played lost all lives
    if (player.update(deltaTime) == false) then
        table.remove(players, k)
    end
end
我还尝试了来自给定答案()的另一个循环,同样的错误

local i=0
while i <= #players do
    local player = players[i]
    if (player.update(deltaTime) == false) then
        table.remove(players, i)
    else
        i = i + 1
    end
end
locali=0
虽然我感谢一条评论(现在已被删除),但我可以修复它。Lua索引从1开始。
因此,我必须将我的设置修改为:

-- setup players
players = {}
for i=0, 3 do
    local gp = InputHandler:gamepad(i)
    if(gp:isConnected()) then
        logMessage(i .. " is connected")
        players[i+1] = createCharacter(i, gp)
    end
end

这是如何解决移除问题的<代码>表。在循环中删除
不安全。你不能那样做。它会移动表中的其他条目。这就搞砸了
成对的
和手动计数的循环。通过使用第二个while循环,它可以手动控制循环变量?哦,是的,手动循环看起来可以解释删除的原因。是的,从1开始会给你一个问题的折扣。我现在看到了如何在
循环中修复它。(我可能会用I=1,4的
来代替,但是。)