使用transition.to()的函数不起作用

时间:2013-12-22 17:39:44

标签: function lua corona

local rect = display.newRect(100, 100, 100, 100)

local moving, moving2
function moving()
    transition.to(rect, {time=500, x=300, y=100, onComplete=moving2})
end

function moving2()
    transition.to(rect, {time=500, x=100, y=300, onComplete=moving})
end

大家好。我是Lua的新手,所以我想知道为什么我的矩形不会在我的屏幕上移动这个功能?当我只使用下面的代码时,它会移动但最后会停止。我希望它反复从一边移动到另一边:

local rect = display.newRect(100, 100, 100, 100)
transition.to(rect, {time=500, x=300, y=100, onComplete=moving2})

5 个答案:

答案 0 :(得分:2)

您需要调用其中一个功能。只是说:

moving()

作为最后一行。

答案 1 :(得分:2)

就像他们说的那样,因为你没有打电话,所以不会动 moving() 要么 moving2() 在你的代码中。

您知道,在onComplete参数中,您没有使用两个不同的函数执行此复杂的操作。通过更改缓动函数并将iterations参数设置为-1以获得无限循环,您可以通过一次转换对对象产生相同的效果。

以下是可用的缓动功能列表:http://docs.coronalabs.com/api/library/easing/index.html,您可以看到easing.continuousLoop功能可以执行您想要的操作。

您可以尝试这样的事情:

local rect = display.newRect(100, 300, 100, 100)
transition.to(rect, {
    time = 500, 
    x = 300,
    y = 100,
    iterations = -1,
    transition = easing.continuousLoop,
})

答案 2 :(得分:0)

放到最后之后     移动() 它工作正常。已经测试过了。或者你可以从     moving2()

答案 3 :(得分:0)

感谢大家,最终将moving ()放在最后

我已经用easing.continuousLoop快速尝试了最后一段代码,但它并没有完全符合我的要求,但我会在以后深入检查,因为它可能会有所帮助

无论如何,谢谢所有

答案 4 :(得分:0)

哦,伙计,使用本地对象并从两个转换中调用它在某种程度上会导致严重错误,使用现有代码将“rect”传递给每个转换,因此它不会被“仍然在过渡“。

local rect = display.newRect(100, 100, 100, 100)

local moving, moving2
function moving(inObj)
    if (inObj == nil) then inObj = rect end
    transition.to(inObj, {time=500, x=300, y=100, onComplete = function(iObj)
         moving2(iObj)
    end})
end

function moving2(inObj)
    transition.to(inObj, {time=500, x=100, y=300, onComplete, onComplete = function(iObj)
         moving(iObj)
    end})
end

如果你只是想偷懒:)

local rect = display.newRect(100, 100, 100, 100)
local movingIndex = 0
local moveData = {
{time = 500, x = 300, y = 100},
{time = 500, x = 300, y = 100}
}

function MoveObject(inObj)
    movingIndex = movingIndex + 1
    if (movingIndex > #moveData) then movingIndex = 1 end

    transition.to(inObj, {tag = "movingObjects", time=moveData[movingIndex].time, x=moveData[movingIndex].x, y=moveData[movingIndex].y, onComplete = function(iObj)
         MoveObject(iObj)
    end})
end

MoveObject(rect)

这样你只需要一个函数,只需将动画点添加到moveData表中即可:)

通过使用tag =“movingObjects”标记转换,我们可以暂停和恢复任何正在运行的转换,只需要一个调用,如transition.pause(“movingObjects”)或取消等,当你想要暂停和/或移动到另一个看不必等待转换结束或将其包装在pcall()

只是值得深思:)

btw ::我没有测试上面的代码我只是在这个编辑器中编写它,所以可能有一两件需要tweeeking的东西。