Publicidad

Anuncios Google

[LUA]metodo para que solo cuente una pulsacion de botones

Metodo de Daklon:

el otro dia estaba haciendo un Homebrew, cuando me econtre con un problema, cada vez que se leia el bucle principal, el while true do, se comprobaba si el boton estaba pulsado, yejecutaba la orden correspondiente varias veces, mientras que yo solo queria que lo ejecutara una vez por cada pulsacio del boton, asi que aqui posteo la solucion, por si a alguien le hace falta en un futuro,no es la unica forma de hacerlo, pero es la que se me ocurrio a mi,si otros coders quieren poner sus metodos bienvenidos son, editare el post y los pondre, todo sea por aprender xD

mi metodo es facil, simplemente crea una variable, con el nombre que quieras, en mi caso la llame "pulsado", luego igualala a 0, luego cada vez que hagas una comprobacion de si una tecla esta pulsada, normalmente simplemeten compruebas si la tecla vale mas o igual a 1, pero si queremos que solo lo compruebe una vez tenemos que añadirle algo, un simple "and pulsado = 0" y al final de codigo(tiene que ser al final para dejar que ejecute todas las teclas minimo una vez y luego compruebe si hay alguna pulsada) ponemos un if, un poco largo pero simple que lo que hace es comprobar si hay alguna tecla pulsada, si la hay establece que pulsado = 1 por lo que ya no se cumple la regla de boton(0) >= 1 and pulsado = 0 y no se ejecuta el codigo por mucho tiempo que mantengamos puslado el boton,y que en caso de que ninguna tecla este pulsada(levantamos el dedo del boton, por lo que seria una pulsacion nueva) establecemos que pulsado = 0 por lo que ya se volveria a ejecutar el codigo 1 sola vez en caos de que se pulsara la tecla correspondiente, pongo el codigo porque puede que me haya liado mucho con al explicacion y no se me entienda xD

InitGFX(1920,1080)
initPads(7)
pulsado = 0-- variable que comprueba si el boton esta pulsado
numero = 0
while true do
if cross(0) >= 1 and pulsado == 0 then-- comprueba las dos cosas que dije antes
Fuente:Print(500, 500, string.format("%i", numero))-- imprime en pantalla el valor de la variable numero
numero = numero + 1-- suma una unidad a la variable numero
end
if square(0) >= 1 or cross(0) >= 1 or circle(0) >= 1 or triangle(0) >= 1 or up(0) >= 1 or down(0) >= 1 or left(0) >= 1 or right(0) >= 1 or R1(0) >= 1 or R2(0) >= 1 or L1(0) >= 1 or L2(0) >= 1 then-- comprueba si algun boton esta pulsado
        pulsado = 1-- establece como 1 la variable pulsado
else-- en caso de que no este pulsado ningun boton
 pulsado = 0-- establece que pulsado = 0 por lo que deja ejecutar codigos de if que contienen "and pulsado = 0"         
	end
 
end

hay casos en los que haces un if boton(0)... and pulsado = 0...

y despues haces otro para otras cosa con toro boton, y se ejecutan los dos ya que no ha llegado al fin del programa para establecer que pulsado = 1, esto se soluciona estableciendo que pulsado = 1 dentro del propio if boton(0).. and pulsado = 0... que da este problema, tambien puedes hacerlo en todos y asi estas seguro, pero es mejor no hacerlo(para no alargar mucho el codigo) y ponerlo solo cuando haga falta


Metodo de Nekerafa:

nekerafa tiene una forma un poco distinta de hacerlo,depende del punto de vista puede ser mas simple o mas complicado, es cuestion de gustos, yo prefiero el mio, pero porque se me ocurrio a mi, asi escojan el que mas les guste xD

consiste en crear una variable para cada boton,luego cuando quieres ejecutar una comprobaciond e botones, el añades un "and boton(0) ~= oldboton", y al final del programa estableces que el valor de oldboton(donde va boton va el nombre del boton correspondiente) es igual al valor actual de boton en cuestion, " oldboton == boton(0), por lo que si no pulsas el boton, el valor no varia por lo que el operador ~=("distinto") no se cumple y no ejecuta el codigo, y si lo pulsamos, solo se cumple en una lectura del while true por que luego al final del programa se establece que old boton es igual al boton en cuestion, pongo un ejemplo para que se entienda mejor

InitGFX(1920,1080)
initPads(7)
oldcross = 0-- variable que comprueba si la X esta pulsada
numero = 0
while true do
if cross(0) >= 1 and oldcross ~= 0 then-- comprueba las dos cosas que dije antes
Fuente:Print(500, 500, string.format("%i", numero))-- imprime en pantalla el valor de la variable numero
numero = numero + 1-- suma una unidad a la variable numero
end
oldcross = cross(0)
 
end

el hipotetico caso de que tengas el mismo problema que con el otro metodo, que se ejecutan dos ordenes, porque estan antes de que se compruebe si el boton esta pulsado, se soluciona de la misma forma, simplemente pon dentro de la primera orden que te de problemas "oldboton == boton(0)" por lo que ya en el siguiente if la segunda condicion no se cumple y no se ejecuta el if

 

 

PD: logicamente si copian tal cual el codigo como esta, no funcionaria, porque faltan cosas por poner


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.
Imagen de NEKERAFA

Y no solo eso

Si solo quieres que se pulse un boton hay que anidarlos como if ... then ... elseif ... then ... etc

Imagen de Daklon

con tu meotod puede que si,

con tu meotod puede que si, pero con el mio vale con que pongas dentro del codigo de cada boton que pulsado = 0 y ya no ejecutara ningun otro boton

Imagen de Dioni0396

porque no usas

tostring en vez de string.format?

Imagen de NEKERAFA

No

Yo no utilizo ni tostring ni string.format, yo lo concateno en el print, lo que pasa que Daklon lo puso así.

Pero da igual de que forma se muestre, siempre va a dar el mismo resultado, de ahí que un proceso se pueda hacer de mil formas y en mil lenguajes, y eso es da muchisima variedad a los programadores, ya que unas formas, como estan construidas, son mejores para algo, y otras son mejores para otras cosa.


NekeOS, el nuevo shell para PSP

PS4 500GB OFW, PS3 320GB OFW, PS3 500GB OFW, PSP 6.39 PRO-C Fix4.

Sony Xperia Z1 Compact con Android 5.1.1

Portatil Lenovo z50-70 Intel® Core™ i7-4510U y NVIDIA GeForce 840M con Elementary OS 0.3.2 Freya (64 bits) y Windows 10 (64 bits).

Imagen de Daklon

a que te refieres a que lo

a que te refieres a que lo concatenas? como lo haces?

Se concatena con dos puntitos

Se concatena con dos puntitos ".." por ejemplo

a= "hola "
b="mundo"
c=" a..b --eso será "hola mundo"

pero si estás acostumbrado al C y quieres usar el format sirve igual. 

Imagen de Daklon

a vale, pero eso no resuelve

a vale, pero eso no resuelve el convertir una variable numerica a texto

Imagen de NEKERAFA

No

Haber, si se concatena una variable number a un string, lua trata a todo como un string. Si en cambio se hacen operaciones con strings: "1" + "200", lua lo trara como si fuera numbers y hace la operación.

Esto no solo ocurre en Lua, tambien en todos los lenguajes de scripting


NekeOS, el nuevo shell para PSP

PS4 500GB OFW, PS3 320GB OFW, PS3 500GB OFW, PSP 6.39 PRO-C Fix4.

Sony Xperia Z1 Compact con Android 5.1.1

Portatil Lenovo z50-70 Intel® Core™ i7-4510U y NVIDIA GeForce 840M con Elementary OS 0.3.2 Freya (64 bits) y Windows 10 (64 bits).

Imagen de Daklon

a vale ok xD

a vale ok xD

Mejor método: LuaDEV para PS3

Mejor método: LuaDEV para PS3 y controls.press

Imagen de Daklon

pero como aun no lo hay hay

pero como aun no lo hay hay que apañarsela como se pueda xD

Imagen de NEKERAFA

Jejejeje

Al final lo pusiste... esta bien.
Otra cosita, tambien podrías poner mi metodo? Esque ahora estoy en la PS3... Y si no puedes cuando vaya al PC lo incluyo y lo explico


NekeOS, el nuevo shell para PSP

PS4 500GB OFW, PS3 320GB OFW, PS3 500GB OFW, PSP 6.39 PRO-C Fix4.

Sony Xperia Z1 Compact con Android 5.1.1

Portatil Lenovo z50-70 Intel® Core™ i7-4510U y NVIDIA GeForce 840M con Elementary OS 0.3.2 Freya (64 bits) y Windows 10 (64 bits).

Imagen de Daklon

ok no te preocupes ahora lo

ok no te preocupes ahora lo pongo xD

Edit: puesto, si hay algo con lo que no estas de acuerdo dimelo y lo cambio xD

Imagen de Dioni0396

esta

parte no funcionaria:

oldcross == cross(0)

ahi que quitar 1 =
Imagen de Daklon

cierto fallo mio, ahora lo

cierto fallo mio, ahora lo corrijo

Imagen de Dioni0396

Que metodo?

¿? Creo que no existen mas, excepto el del Sample lua code.

Imagen de Daklon

hay muchas formas de hacer lo

hay muchas formas de hacer lo mismo, no tiene porque ser siempre con el mismo codigo xD

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.