为什么我的应用卡住了

Why my app gets stucked

我正在编写应用程序的介绍和演示代码。一切正常,但当我尝试使用它时,我发现了一个错误,我不知道如何摆脱它。

这就是该应用程序的作用:首先,您会看到简历中显示的说明 "Touch when the square appears, if other figure appears don't touch the screen"。所以演示开始了,如果你不触摸方块,就会出现一条消息,上面写着 "remember to touch the square",但如果你触摸屏幕以摆脱消息,就会像触摸其他图形一样读取它。我一直在想办法解决这个问题,但这真的很难。

所以,我需要一点帮助,请。消息显示在屏幕上时阻止触摸屏的方法或逻辑绕过此方法的方法。

感谢

P.S: 这是代码

---------------------------------------------------------------------------------
-- SCENE NAME
-- Scene notes go here
---------------------------------------------------------------------------------

local storyboard = require( "storyboard" )
local scene = storyboard.newScene()

-- Clear previous scene
--storyboard.removeAll()

-- local forward references should go here --

---------------------------------------------------------------------------------
-- BEGINNING OF YOUR IMPLEMENTATION

 --tiempoVisible = 150                                             --Tiempo de visibilidad del circulo
 --tiempoNoVisible = 1850                                          --Intervalo de timepo entre un circulo y otro

 tiempoVisible = 200                                             --Tiempo de visibilidad del circulo
 tiempoNoVisible = 2250                                          --Intervalo de timepo entre un circulo y otro


 aciertos = 0                                                    --Registra los aciertos del paciente
 comisiones = 0                                                  --Registra las comisiones del paciente
 omisiones = 0                                                   --Registra las omisiones del paciente
 tiempo = tiempoNoVisible                --Entrega el tiempo que debe estar el circulo y el tiempo de intervalo

--Contiene la secuencia de circulos buenos (1) y circulos malos (0)
 tablaSecuencia = {0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1}
 contadorSecuencia = 0                          --Registra en que lugar de la tabla va la secuencia

 esTransparente = true                                           --Verifica si el circulo esta transparente o no
 estaRespondido = false                                          --Verifica si el circulo fue presionado


---------------------------------------------------------------------------------

-- Called when the scene's view does not exist:
function scene:createScene( event )
  local group = self.view

  --print("inside")
    imagenINTRU = display.newImage("test2/instrucciones.png", 0, 0, true);
    imagenINTRU:scale(display.contentWidth/imagenINTRU.contentWidth+0.15, display.contentHeight/imagenINTRU.contentHeight+0.1);
    imagenINTRU.x= display.contentWidth/2;
    imagenINTRU.y= display.contentHeight/2+40;

    group:insert(imagenINTRU);
    empezoTest = false

  circulo = display.newCircle(display.contentCenterX-20, display.contentCenterY-30, 80)
  circulo.alpha = 0

  group:insert(circulo)
  circulo.isVisible=false;

imagenP = display.newImage("test2/pentagonox.png", 0, 0, true);
    imagenP:scale(1, 1);
    imagenP.x= display.contentWidth/2;
    imagenP.y= display.contentHeight/2;
    group:insert(imagenP);
    imagenP.isVisible=false;


 imagenC = display.newImage("test2/cuadradox.png", 0, 0, true);
    imagenC:scale(1, 1);
    imagenC.x= display.contentWidth/2;
    imagenC.y= display.contentHeight/2;
    group:insert(imagenC);
    imagenC.isVisible=false;

mensajeA = display.newText("¡Eso es!", 0, 0, 400, 0, native.systemFontBold, 60)
  mensajeA.x = (display.contentWidth/2) + 100
  mensajeA.y = 600 --display.contentHeight/2
  mensajeA:setFillColor(144/255, 173/255, 193/255, 1)
  mensajeA.align = "center"
  group:insert(mensajeA)

  mensajeB = display.newText("¡Recuerde que debe presionar cuando\n          aparezca un cuadrado!", 0, 0, 950, 0, native.systemFontBold, 50)
  mensajeB.x = 550
  mensajeB.y = 600 --display.contentHeight/2
  mensajeB:setFillColor(144/255, 173/255, 193/255, 1)
  mensajeB.align = "center"
  group:insert(mensajeB)

  mensajeC = display.newText("¡Recuerde que NO debe presionar cuando\n      aparezca otra figura geométrica!", 0, 0, 1100, 0, native.systemFontBold, 50)
  mensajeC.x = 550
  mensajeC.y = 600 --display.contentHeight/2
  mensajeC:setFillColor(144/255, 173/255, 193/255, 1)
  mensajeC.align = "center"
  group:insert(mensajeC)


mensajeA.isVisible=false;
mensajeB.isVisible=false;
mensajeC.isVisible=false;

end

-- Called BEFORE scene has moved onscreen:
function scene:willEnterScene( event )
  local group = self.view

end

-- Called immediately after scene has moved onscreen:
function scene:enterScene( event )
  local group = self.view

end

-- Called when scene is about to move offscreen:
function scene:exitScene( event )
  local group = self.view

end

-- Called AFTER scene has finished moving offscreen:
function scene:didExitScene( event )
  local group = self.view

end


 function finalizar()
   Runtime:removeEventListener("touch", primerTouch)
 Runtime:removeEventListener("touch", touch)
 imagenINTRU:removeSelf()
 imagenINTRU=nil;
 end

-- Called prior to the removal of scene's "view" (display view)
function scene:destroyScene( event )
  local group = self.view

end

-- Called if/when overlay scene is displayed via storyboard.showOverlay()
function scene:overlayBegan( event )
  local group = self.view
  local overlay_name = event.sceneName  -- name of the overlay scene

end

-- Called if/when overlay scene is hidden/removed via storyboard.hideOverlay()
function scene:overlayEnded( event )
  local group = self.view
  local overlay_name = event.sceneName  -- name of the overlay scene

end


 function img()
    imagenINTRU:removeSelf();
    imagenINTRU = null;
    imagenINTRU = display.newImage("test2/backGprueba.png", 0, 0, true);
    imagenINTRU:scale(display.contentWidth/imagenINTRU.contentWidth+0.15, display.contentHeight/imagenINTRU.contentHeight+0.1);
    imagenINTRU.x= display.contentWidth/2;
    imagenINTRU.y= display.contentHeight/2+80;
    imagenINTRU:toBack();
end

function primerTouch(event)
  if ((event.phase == "ended" or event.phase == "cancelled") and not empezoTest) then
    empezoTest = true

    img()
    timer.performWithDelay(tiempo, CambiarAlpha)
  end
end


function CambiarAlpha()
  if empezoTest then
  if msjeVisible()==false then
  if esTransparente then
    print(contadorSecuencia.." turno")
    if contadorSecuencia == 16 then
    --if contadorSecuencia == 3 then
      if tablaSecuencia[contadorSecuencia] == 1 and not estaRespondido then
        no_msj()
        print("OmisionA")
        mensajeB.isVisible=true; 
        timer.performWithDelay(1600, delayB)
        --omisiones = omisiones + 1
      end

      contadorSecuencia = 0
      storyboard.purgeScene("ini_prueba2")
      storyboard.removeScene("ini_prueba2")
      storyboard.removeAll("ini_prueba2")
      storyboard.gotoScene("ini_prueba2", "fade", 1500)

      empezoTest=false;
      finalizar()
    else
      delay=false;
      --contadorSecuencia = contadorSecuencia - 1
      if tablaSecuencia[contadorSecuencia] == 1 and not estaRespondido then
        print("Omisionb")
        no_msj()
        mensajeB.isVisible=true; 
        timer.performWithDelay(1600, delayB)
        delay=true;

      end
      if delay==false then
        contadorSecuencia = contadorSecuencia + 1


        if tablaSecuencia[contadorSecuencia] == 0 then
          imagenP.isVisible=true;
        else
          imagenC.isVisible=true;
        end

        esTransparente = false
        circulo.alpha = 1
      --estaRespondido = false

        tiempo = tiempoVisible
        print("tmpo no visi ."..tiempo)
        timer.performWithDelay(tiempo, CambiarAlpha)

      --end
      else -- if 199
        contadorSecuencia = contadorSecuencia + 1
      end -- end delay
    end
  else-- else transparente 177
    esTransparente = true
    circulo.alpha = 0
    no_TPC()

        tiempo = tiempoNoVisible
        estaRespondido = false
        timer.performWithDelay(tiempo, CambiarAlpha)

    --tiempo = tiempoNoVisible
    --estaRespondido = false
    --timer.performWithDelay(tiempo, CambiarAlpha)
  end
else
  tiempo = tiempoNoVisible
timer.performWithDelay(tiempo, CambiarAlpha)
  end --if mensaje visible
  end --if empezoTest
end

function msjeVisible()
  is=false;
  if mensajeA.isVisible==true then
    is= true;
  end
  if mensajeB.isVisible==true then
    is= true;
  end
  if mensajeC.isVisible==true then
    is= true;
  end
  return is;
end


function no_TPC()
  imagenP.isVisible=false;
  imagenC.isVisible=false;
end

function no_msj()
mensajeA.isVisible=false;
mensajeB.isVisible=false;
mensajeC.isVisible=false;

end

function no_msj2()
mensajeA.isVisible=false;
mensajeB.isVisible=false;
mensajeC.isVisible=false;
end

function delayA(event)
  if mensajeA.isVisible  then
    mensajeA.isVisible=false;
    tiempo = 100--tiempoNoVisible
--timer.performWithDelay(tiempo, CambiarAlpha)
print("A")
  end
end
function delayB(event)
  if mensajeB.isVisible  then
    mensajeB.isVisible=false;
    tiempo = 100--tiempoNoVisible
timer.performWithDelay(tiempo, CambiarAlpha)
print("B")
  end
end
function delayC(event)
  if mensajeC.isVisible  then
    mensajeC.isVisible=false;
    tiempo = 100--tiempoNoVisible
--timer.performWithDelay(tiempo, CambiarAlpha)
print("C")
  end
end


function touch(event)
  if event.phase == "began" and  empezoTest then
    if tablaSecuencia[contadorSecuencia] == 1 and not estaRespondido then
      no_msj2()
      mensajeA.isVisible=true; 
      timer.performWithDelay(1600, delayA)
      aciertos = aciertos + 1
      estaRespondido = true
    elseif tablaSecuencia[contadorSecuencia] == 0 and not estaRespondido then
      no_msj2()
      mensajeC.isVisible=true; 
      timer.performWithDelay(1600, delayC)
      comisiones = comisiones + 1
      estaRespondido = true
    end
  end
end


--timer.performWithDelay(tiempo, CambiarAlpha)
Runtime:addEventListener("touch", touch)
---------------------------------------------------------------------------------
-- END OF YOUR IMPLEMENTATION
---------------------------------------------------------------------------------
 Runtime:addEventListener("touch", primerTouch)
-- "createScene" event is dispatched if scene's view does not exist
scene:addEventListener( "createScene", scene ) 
-- "willEnterScene" event is dispatched before scene transition begins
scene:addEventListener( "willEnterScene", scene )
-- "enterScene" event is dispatched whenever scene transition has finished
scene:addEventListener( "enterScene", scene )
-- "exitScene" event is dispatched before next scene's transition begins
scene:addEventListener( "exitScene", scene )
-- "didExitScene" event is dispatched after scene has finished transitioning out
scene:addEventListener( "didExitScene", scene )
-- "destroyScene" event is dispatched before view is unloaded, which can be
-- automatically unloaded in low memory situations, or explicitly via a call to
-- storyboard.purgeScene() or storyboard.removeScene().
scene:addEventListener( "destroyScene", scene )
-- "overlayBegan" event is dispatched when an overlay scene is shown
scene:addEventListener( "overlayBegan", scene ) 
-- "overlayEnded" event is dispatched when an overlay scene is hidden/removed
scene:addEventListener( "overlayEnded", scene )

---------------------------------------------------------------------------------

return scene

Amir 是正确的,Corona 不再支持 Storyboard 实现。我建议使用更强大的编译器。

开始使用 Corona Composer 库。 Corona Docs

Corona 不再支持 Storyboard。尝试使用作曲家。