Android 如何使用Lua和Corona实验室SDK中的循环使对象在屏幕上逐渐移动
我正在做一个有障碍的游戏,玩家必须跳过障碍。我正在使用科罗纳实验室模拟器来运行它,但每次我这样做,要么障碍物立即穿过屏幕的一半并停止,要么整个东西就崩溃了。这是我的密码:Android 如何使用Lua和Corona实验室SDK中的循环使对象在屏幕上逐渐移动,android,loops,lua,crash,coronasdk,Android,Loops,Lua,Crash,Coronasdk,我正在做一个有障碍的游戏,玩家必须跳过障碍。我正在使用科罗纳实验室模拟器来运行它,但每次我这样做,要么障碍物立即穿过屏幕的一半并停止,要么整个东西就崩溃了。这是我的密码: function obstacles() loop = 2000 while loop > 0 do obstacle:translate( -1, 0 ) if obstacle.x > 0 then
function obstacles()
loop = 2000
while loop > 0 do
obstacle:translate( -1, 0 )
if obstacle.x > 0 then
loop = loop - 1
else
loop = 2000
obstacle:translate( display.contentWidth, 0 )
end
end
end
非常感谢您的帮助。Corona SDK提供了相应的工具。不要使用循环,而是使用:
当目标是你的障碍物时,在参数中,你可以指定x位置、时间等。对于屏幕上出现的东西,可能会有一些奇怪的来源。我将
障碍物
放置在(0,0)处,完全不移动,并确保在尝试设置其动画之前,我了解父对象的坐标系以及障碍物
的和
我假设在您包含的代码块之外还有其他代码,但我认为您可以简化运动逻辑,稍后您会感谢您自己(这并不完美,但您明白了):
——设置初始位置
障碍物.x=display.contentWidth
--定义每帧移动逻辑
本地移动障碍=功能(事件)
障碍物.x=障碍物.x-1
如果.x<0,则
障碍物.x=display.contentWidth
结束
结束
--每帧运行一次逻辑
运行时:addEventListener(“enterFrame”,移动障碍物)
了解Corona SDK是一个事件驱动系统非常重要。真的没有一个游戏循环。代码执行得如此之快,以至于无法使用循环之类的结构来移动对象
如上所述,转换库(例如transition.to)可以随时间移动对象
与游戏循环最接近的是创建一个函数,并使用“enterFrame”事件将其附加到运行时对象。每帧(每秒30次或每秒60次)将调用此函数。它不会精确到每秒30或60次,因为它会花费太多的时间做其他工作来获得完整的帧速率。如果要使用enterFrame侦听器:
local function doSomethingEachFrame( event )
-- put code here you want to execute over time.
-- just remember it fires a lot...
end
Runtime:addEventListener( "enterFrame", doSomethingEachFrame )
如果您需要停止,那么您可以执行以下操作:
Runtime:removeEventListener( "enterFrame", doSomethingEachFrame )
非常感谢。游戏的那部分已经完成了。最后一点是得分。如果一个物体接触到某种颜色,有没有办法结束游戏?当然有@Mitra0000。不过我还是建议问一个新问题。
local function doSomethingEachFrame( event )
-- put code here you want to execute over time.
-- just remember it fires a lot...
end
Runtime:addEventListener( "enterFrame", doSomethingEachFrame )
Runtime:removeEventListener( "enterFrame", doSomethingEachFrame )