移动每个单独的对象-lua
我对Lua很陌生,请原谅我的无知,但我找不到解决问题的办法 发生了什么事 我目前正在尝试将对象从A移动到B,一旦对象位于B,则在A处重新启动,并在连续循环中再次移动到B移动每个单独的对象-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,
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吗?另外,似乎有些对象将在屏幕外开始,有些对象将在屏幕外结束,这是您想要的吗?