首页 > 解决方案 > 电晕几个transition.to失相

问题描述

我正在创建几个显示对象并使用 transition.to 水平移动它们。除了对象 x 位置偏离相位/位置外,一切正常。对象应该永远具有相同的 X 位置,但运行时间越长,它们的位置就越偏离。

local function onLoopXListener( )
    transition.to( platform, { time=2000, x=0, transition=easing.inOutSine, delay=0} );
    transition.to( platform, { time=2000, x=320, transition=easing.inOutSine, delay=2000, onComplete=onLoopXListener} );
end

local function StartTransition( )
    transition.to( platform, { time=2000, x=0, transition=easing.inOutSine, delay=1000 } ); 
    transition.to( platform, { time=2000, x=320, transition=easing.inOutSine,  delay=3000, onComplete=onLoopXListener} );
end

for i = 1, 4, 1 do
    --create a new platform displayobject
    --seperate it vertically
    StartTransition( )
end

如果我的代码很丑陋,请原谅我(我已经删除了不相关的代码——除了位置之外它都有效)——这是我在这里询问的转换概念。

标签: coronasdk

解决方案


我用过“enterFrame”,它工作正常。这是我的实现:

local _lastTime = 0
local function OnEnterFrame( event )
    deltaTime = event.time - _lastTime
    _lastTime = event.time
    MoveMyPlatformOnEnterFrame(deltaTime)
end

Runtime:addEventListener( "enterFrame", OnEnterFrame )

这就是我实现 sin() 转换的方式:记住这需要超越函数调用。

local _loopTime  = someValue
local _xRadians =0
local _amplitude = someOtherValue
local _platform --this is the Display Object I want to move
function MoveMyPlatformOnEnterFrame( deltaTime )
    delta = deltaTime / _loopTime * (44/7)
    _xRadians = _xRadians + delta
    _xRadians = math.fmod( _xRadians, (44/7) )
    _platform.x = _position.x + math.sin( _xRadians ) * _amplitude
end

推荐阅读