移动每个单独的对象 - lua

时间:2014-05-09 10:34:06

标签: lua corona

我对Lua很新,所以请原谅我的无知,但我无法找到解决问题的方法。

发生了什么

我目前正尝试将对象从 A 移动到 B ,一旦对象位于 B ,重新启动 A 并在连续循环中再次移至 B

local function moveLeft(obj)
    print("moving left")
    local function resetObj(obj)
        transition.to (obj,{  time = 10, x = obj.x + screenWidth + obj.width, onComplete=moveLeft  })
    end

    transition.moveBy (obj,{  time = 3000, x = -screenWidth -obj.width, onComplete=resetObj })
end

然后使用

调用
for idx1 = 1, 8 do
    enemyRed = display.newImage("Images/enemyRed.png")
    -- 7. Apply physics engine to the enemys, set density, friction, bounce and radius
    physics.addBody(enemyRed, "dynamic", {density=0.1, friction=0.0, bounce=0, radius=9.5});
    local xPositionEnemy = math.random() + math.random(1, screenWidth)
    enemyRed.x = xPositionEnemy;
    enemyRed.y = yPosition; 
    enemyRed.name = "enemyRed"..idx
    moveLeft(enemyRed);
end

这很棒,所有对象都从 A 转移到 B

问题/问题

这里的问题是,只有名为" enemyRed"的所有对象才会调用onComplete。在B点。

问题

我想要的是每个名为" enemyRed"一旦到达目的地,重置为原始位置。

1 个答案:

答案 0 :(得分:1)

我无法回答问题/问题,因为它不清楚(我添加了评论)。回答这个问题,你应该为每个对象添加一个A位置字段,这样你就可以轻松地返回它(样式注释:这是Lua,而不是c,你不需要分号)。所以在你的循环中这样做:

enemyRed.x = xPositionEnemy
enemyRed.startPos = xPositionEnemy

然后在resetObj执行此操作:

local function moveLeft(obj)
    local function resetObj()
        print("moving back")
        transition.to (obj,
            {  time = 10, x = obj.startPos, onComplete=function() moveLeft(obj) end  })
    end

    print("moving left")
    transition.moveBy (obj, 
        {  time = 3000, x = -screenWidth - obj.width, onComplete=resetObj })
end

上述情况还表明,当您从moveLeft功能调用resetObj时,您必须将obj提供给moveLeft,否则obj将会{}零。 resetObj does not need obj`参数,因为它已经是一个upvalue。