我对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"一旦到达目的地,重置为原始位置。
答案 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。