Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用Lua和Corona实验室SDK中的循环使对象在屏幕上逐渐移动_Android_Loops_Lua_Crash_Coronasdk - Fatal编程技术网

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 )