如何在Lua中对表中的对象进行代码迭代?

我正在尝试编写一个执行视差滚动的代码。在“pieces”表中的所有精灵都需要飞到空中,然后将它们的位置重置为y=200和x=randomnumber。之后,我会根据它们的移动速度来缩小或扩大它们,以实现真正的3D效果。

以下是一个朴素的尝试:

local speed = math.random(250,1000)
pieces = { "sprite", "sprite1", "sprite2", "sprite3", "sprite4",
"sprite5", "sprite6", "sprite7", "sprite8", "sprite9", "sprite10",
"sprite11", "sprite12", "sprite13", "sprite14", "sprite15" }

function update(self, dt)
    for i, v in ipairs(pieces) do
        p = go.get_position(v)
        p.y = p.y + speed * dt
        print(v)
            if p.y > 800  then
            p.y = -200
            p.x = math.random(1,25) * math.random(10,35)*2
            local speed = math.random(250,1000)
        end
        go.set_position(v)
    end
end

如果我在ipairs内打印“v”,我会得到期望的输出(sprite,sprite1,sprite等),因此我认为我上面所写的应该可以工作。但事实并非如此。请帮忙?

点赞
用户7184976
用户7184976

以下是我找出来的正确代码。如果有人看到并需要解释,请告诉我。

local speed = math.random(250,1000)
--pieces = { "sprite1", "sprite2", "sprite3", "sprite4", "sprite5", "sprite6", "sprite7", "sprite8", "sprite9", "sprite10", "sprite11", "sprite12", "sprite13", "sprite14", "sprite15" }
pieces = { "go1", "go2", "go3" }

function update(self, dt)
    for i, v in ipairs(pieces) do
        p = go.get_position(v)
        p.y = p.y + speed * dt
        if p.y > 800  then
            p.y = math.random(200,800)/-1
            p.x = math.random(1,25) * math.random(10,35) * 2
            local speed = math.random(250,1000)
            go.set_position(p, v)
        else
            go.set_position(p, v)
        end
    end
end
2016-11-20 13:33:29