Search code examples
androidluacoronasdkcorona-storyboard

Why my app gets stucked


i'm working in the code of a intro and demo for an app. And everything works fine but while i was trying to use it i found a bug and i don't know how to get rid of it.

This is what the app do: First you see the instructions that says in resume "Touch when the square appears, if other figure appears don't touch the screen". So the demo starts, and if you don't touch the square a message is going to appear that says "remember to touch the square", but if you touch the screen to get rid of the message reads it as if you touch other figure. I've benn trying to figure how to manage this, but it's been really hard.

So, im asking for a little help, plz. A way to block touchscreen while the message is on the screen or a way of logic bypass this.

Thx

P.S: This is the code

---------------------------------------------------------------------------------
-- 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

Solution

  • Storyboard is not supported anymore in Corona. Try using composer.