在lua/corona sdk代码中出现了流程问题。

我对 Corona SDK 中程序的流程非常困惑。

我想要的是当过渡结束时流程继续进行,我知道我可以使用 Oncomplete,但我不知道在这种情况下该如何使用。

我有这段代码:

while ban == 2 do
    actual = x
    desplazar = x
    while actual >= 0  do
        actual = actual - 4
        if inTable(t,actual) then
            while inTable(t,actual) and actual >=0 do
                actual= actual - 4
            end
        end
    if actual >= 0 then
         banaux=1
         if inTable(t, desplazar) then
             block[desplazar].value=0
             block[desplazar]:removeSelf()
             for z=1, tablelength(t) do
                  if t[z] == desplazar then
                  t[z]=32
             end
         end
    end
    transition.to(block[actual], {time=velocity, x=block[desplazar].x, y=block[desplazar].y})
    cambiodesp(actual,desplazar)
    desplazar = desplazar - 4
  end
 end
 x = x -1
 if inTable(t,x) then
 else
    ban = 1
 end
end

由于转换,我得到了许多意外结果,我认为虽然转换还没有完成,代码仍在运行,我想在转换完成时做一些事情,但我认为我不能使用 oncomplete。

我希望在这个完成后继续运行:

transition.to(block[actual], {time=velocity, x=block[desplazar].x, y=block[desplazar].y})

我不理解代码的执行流程,希望你能向我解释一下。

点赞
用户2186639
用户2186639

也许你可以使用这个技巧,但我不建议这样做。因为它可能会阻塞运行时间。我建议你编写函数。这样你就可以正确使用 onComplete 方法。

无论如何,以下是解决问题的办法,虽然不好但很快:

while ban == 2 do
    actual = x
    desplazar = x
    while actual >= 0 do
        actual = actual - 4
        if inTable(t, actual) then
            while inTable(t, actual) and actual >=0 do
                actual = actual - 4
            end
        end
        if actual >= 0 then
            banaux = 1
            if inTable(t, desplazar) then
                block[desplazar].value = 0
                block[desplazar]:removeSelf()
                for z=1, tablelength(t) do
                    if t[z] == desplazar then
                        t[z] = 32
                    end
                end
            end
        end
        local isEnded = false
        transition.to(block[actual], {time=velocity, x=block[desplazar].x, y=block[desplazar].y, onComplete=function() isEnded=true end})
        while isEnded == false do end
        cambiodesp(actual,desplazar)
        desplazar = desplazar - 4
    end
end
x = x - 1
if inTable(t, x) then
else
    ban = 1
end
2013-07-03 21:47:44