移动每个单独的对象-lua

移动每个单独的对象-lua,lua,coronasdk,Lua,Coronasdk,我对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,

我对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”的对象都位于B点,才会调用onComplete

问题


我想让每个名为“enemyRed”的对象在到达目的地后重置到原始位置A。

我无法回答问题,因为它不清楚(我添加了注释)。问题是,您可能应该为每个对象添加一个位置字段,这样您就可以很容易地返回到它(风格说明:这是Lua,不是c,您不需要分号)。因此,在循环中执行以下操作:

enemyRed.x = xPositionEnemy
enemyRed.startPos = xPositionEnemy
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
然后在
resetObj
中执行以下操作:

enemyRed.x = xPositionEnemy
enemyRed.startPos = xPositionEnemy
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

上面还显示,当从
resetObj
函数调用
moveLeft
时,必须将
obj
赋予
moveLeft
,否则
obj
将为零。resetObj
不需要
obj`参数,因为它已经是一个upvalue

那么你的物体都在同一时间内移动相同的距离(屏幕宽度+obj宽度)?每个transition.moveBy将在同一时间完全完成,因此将在同一时间调用每个onComplete。你是说有些物体比其他物体先到达B吗?另外,似乎有些对象将在屏幕外开始,有些对象将在屏幕外结束,这是您想要的吗?