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
Y no solo eso
Si solo quieres que se pulse un boton hay que anidarlos como if ... then ... elseif ... then ... etc
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
Neotecos.com
porque no usas
tostring en vez de string.format?
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).
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.
a vale, pero eso no resuelve
a vale, pero eso no resuelve el convertir una variable numerica a texto
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).
a vale ok xD
a vale ok xD
Mejor método: LuaDEV para PS3
Mejor método: LuaDEV para PS3 y controls.press
pero como aun no lo hay hay
pero como aun no lo hay hay que apañarsela como se pueda xD
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).
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
esta
parte no funcionaria:
oldcross == cross(0)ahi que quitar 1 =
cierto fallo mio, ahora lo
cierto fallo mio, ahora lo corrijo
Que metodo?
¿? Creo que no existen mas, excepto el del Sample lua code.
hay muchas formas de hacer lo
hay muchas formas de hacer lo mismo, no tiene porque ser siempre con el mismo codigo xD