Anuncios Google

Lua, pad y oldpad

Hola gente tengo un pequeno detalle que corregir e la estoy tartado de hacer un cronometro. Aqui esta la parte del cronometo que no me funcion:

function LeerPulsacion()
 pad = Controls.read()
 oldpad = Controls.read()

 if pad:cross() then         
  contador:start()
  contador2:start()
  contador3:start()
 end  

 if pad:square() then
  contador:stop()
  contador2:stop()
  contador3:stop()
 end         

 if pad:circle() then
  contador:stop()
  contador2:stop()
  contador3:stop()
 end
 
 if pad:triangle() and oldpad == pad:square() then
  contador:reset()
  contador2:reset()
  contador3:reset()
  end
 
 
end

Como ven x para iniciar, cuadrado para parar, circulo para parar y triangulo para reset pero si anteriormente se ha presionado cuadrado. Esto es lo que deseo hacer, que con la x comience con el circulo seria como una pausa, y cuadrado stop y triangulo el reset pero ates abiendolo parado del todo.

El problema que cuando doy cuadrado se para, pero cuando presiono trianglo no hace nada.

Bueno companeros gracias por su tiempo espero su ayuda.


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Prueba esto:

--al principio del todo pones esto:--
 
oldpad=Controls.read()
 
contador_en_marcha=false
 
--luego la funcion, imagino que estara dentro del bucle:--
 
function LeerPulsacion()
 pad = Controls.read()
 
 if pad:cross() and oldpad:cross() ~= pad:cross() and contador_en_marcha == false then          
  contador:start()
  contador2:start()
  contador3:start()
 
contador_en_marcha= true
 end  
 
 if pad:square() and oldpad:square() ~= pad:square() and contador_en_marcha == true then
  contador:stop()
  contador2:stop()
  contador3:stop()
 
contador_en_marcha=false
 end          
 
 
 if pad:triangle() and oldpad:triangle() ~= pad:triangle()  and contador_en_marcha==false then
  contador:reset()
  contador2:reset()
  contador3:reset()
  end
 
oldpad= pad
 
end

Gracias por tu respuesta ha

Gracias por tu respuesta ha servido de mucho aprendizaje.

Imagen de moikop

Supongo...

Que no hace nada porque estas comparando pad:triangle() con oldpad == pad:square() (que esta ni es forma de usar el oldpad)

Prueba asi :

if pad:triangle() and not oldpad:triangle() then
--code
end

Un saludo


Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderas trucos para resolver tus dudas antes.

No preguntes por MP, mejor pregunta aquí.

Imagen de Robione22

¿Qué?

No entiendo mucho tu post, ni tu código. Pero supongo que puedes cambiar estas líneas.

--En vez de poner:
if pad:triangle() and oldpad == pad:square() then
 
--Puedes probar poniendo:
if pad:triangle() and oldpad:triangle() == pad:triangle() then --?

La cosa esta asi un boton

La cosa esta asi un boton para activar, uno para detener, estos dos no tengo problemas, ahora bien uno para reset pero que reviamnte se alla presionado el otro restante, aqui el problema como lo copio para que el reset necesite que primero se presione el otro. Ahora espero haberme hehco entender mejor.

Imagen de Robione22

Creo que sí

Pon una función dentro de la otra.

--Por ejemplo:
if pad:square() then --El botón cuadro es el que se tiene que presionar primero
   if pad:triangle() then
       reset()
   end
end

Supongo que debe funcionar.

Salu2.

Lo he provado pero asi tengo

Lo he provado pero asi tengo que presionar cuadrado y dejarlo presionado y presionar triangulo. Yo lo que deso es que pare y al presionar triangulo de reset, pero que solo de reset si se para con el cuadrado previamente.

Imagen de Robione22

Hay varias formas.

Puedes probar, espero que alguna te funcione XD.

if pad:square() and oldpad:square() ~= pad:square() then
   if pad:triangle() and oldpad:triangle() ~= pad:triangle() then
      reset()
   end
end

if pad:square() and not oldpad:square() then
   if pad:triangle() and not oldpad:triangle() then
      reset()
   end
end

--Este es más complicado. Consiste en hacer dos "estados de la aplicación".
--El estado 1 sería la aplicación normal.
--El estado 2 sería la aplicación con cuadro presionado.
 
estado = 1
 
if pad:square() then --Si no te funciona asi prueba de igual manera que las anteriores.
estado = 2
end
 
if estado == 2 then
   if pad:triangle() then --Si no te funciona asi prueba de igual manera.....
      reset()
   end
end

Espero y te funcioné.

Yo pienso que lo divertido y el reto de la programación, es en buscar soluciones a problemas.

Salu2.

Imagen de moikop

estado = 1   if

estado = 1
 
if pad:square() then --Si no te funciona asi prueba de igual manera que las anteriores.
estado = 2
end
 
if estado == 2 then
   if pad:triangle() then --Si no te funciona asi prueba de igual manera.....
      reset()
   end
end

mmm. A ese lo veo un poco complicado. Porque si apreto cuadrado y despues otro boton, apretando triangulo se reiniciaria. Y supongo sería un bug.

Yo usaría una variable blooleana. Aunque es un tanto complicado.

estado = false
 
if pad:cross() and not oldpad:cross() then
 estado = false
 -- codigo
end
if pad:circle() and not oldpad:circle() then
 estado = false
 --codigo
end
if pad:circle() and not oldpad:circle() then
 estado = false
 --codigo
end
if pad:square() and not oldpad:square() then
 estado = true
 --lo que haga
end
if pad:triangle() and not oldpad:triangle() then
 if estado == true then
  --codigo
 else
  --lo que haga
 end
end
 
--[[ 
esto es solo un ejemplo. Debes adaptarlo a tu codigo ;)
--]]

Un saludo


Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderas trucos para resolver tus dudas antes.

No preguntes por MP, mejor pregunta aquí.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.