Hola, en esta entrega explicaré el uso de las funciones referentes a los controles en LuaDev, es decir, el módulo controls. También veremos la función screen.print con más argumentos que los usados en el "Hola Mundo" y el uso de colores.
Bien, en este punto ya sabemos que para que nuestro código se ejecute indefinidamente debemos colocarlo dentro de un bucle infinito, en nuestro caso entre while true do y end... ahora, para poder leer cualquier cambio en los controles (si se ha presionado un botón) por cada vuelta, actualizaremos, usando la siguiente función:
controls.read()
Esta función actualiza internamente cualquier cambio que se haya realizado, por lo tanto, no devuelve nada.
Luego, para poder armar nuestro Button Tester, necesitamos verificar si se está presionado algo, si tal es el caso, mostrar un mensaje en pantalla diciendo qué se está presionando, para ello usaremos estas funciones:
controls.up() controls.down() controls.right() controls.left() controls.l() controls.r() controls.triangle() controls.circle() controls.cross() controls.square() controls.start() controls.select()
Todas ellas tienen algo en común, devuelven un valor booleano (si no saben que es, aquí lo explico) y por lo tanto, pueden ser usadas dentro de una estructura de control condicional, en este caso usaremos el if, elseif y end.
La sintaxis ya la expliqué en la parte de estructuras de control, así que pasaré directo al código:
if controls.up() then screen.print(10,10,"Estás presionando: Arriba") elseif controls.down() then screen.print(10,10,"Estás presionando: Abajo") elseif controls.right() then screen.print(10,10,"Estás presionando: Derecha") elseif controls.left() then screen.print(10,10,"Estás presionando: Izquierda") end
Y por último, colocamos un screen.flip(), quedando nuestro código final así:
while true do controls.read() if controls.up() then screen.print(10,10,"Estás presionando: Arriba") elseif controls.down() then screen.print(10,10,"Estás presionando: Abajo") elseif controls.right() then screen.print(10,10,"Estás presionando: Derecha") elseif controls.left() then screen.print(10,10,"Estás presionando: Izquierda") end screen.flip() end
Nota: Se recomienda siempre, identar el código, es decir, detro de cada estructura de control, desplazar el código hacia la derecha con Tab (Arriba del Bloq. Mayús), tal y como he puesto en el código final.
Con este código si presionamos algún botón direccional, nos mostrará un mensaje en pantalla indicando cual está siendo presionado, y como usamos elseif, sólo mostrará el primero de las condiciones, ejemplo: si presiono arriba y derecha al mismo tiempo, siempre mostrará arriba, porque el primero que verifica es ese (up).
Claro que también se pueden agregar más botones, siguiendo la misma estructura, es más, podemos hacer que aparezcan varios a la vez usando varios if's, en lugar de elseif's.
Para variar un poco, ahora crearemos una variable de tipo string que contenga el texto "Estás presionando: ", y además, asignaremos colores a cada mensaje, para ello necesitaremos de 4 variables que contengan los colores para los 4 mensajes nuevos que mostraremos:
m = "Estás presionando: " -- mostraremos esto en pantalla antes del nombre de cada botón rojo = color.new(255,0,0) verde = color.new(0,255,0) azul = color.new(0,0,255) amarillo = color.new(255,255,0)
Nota: color.new recibe 3 parámetros como mínimo tal y como usamos en este ejemplo, estos parámetros son Rojo, Verde, y Azul respectivamente, para obtener cualquier color que se desee, usar una paleta de colores como la de Photoshop, es más, hasta la de Paint sirve xD.
Luego de terminar el bloque if...elseif...end colocaremos nuestro nuevo código:
if controls.triangle() then screen.print(10,40,m.."Triángulo",rojo) end if controls.cross() then screen.print(10,55,m.."Equis",verde) end if controls.circle() then screen.print(10,70,m.."Círculo",azul) end if controls.square() then screen.print(10,85,m.."Cuadrado",amarillo) end
Cambios: Esta vez el screen.print recibe 4 parámetros:
El código final:
m = "Estás presionando: " -- mostraremos esto en pantalla antes del nombre de cada botón rojo = color.new(255,0,0) verde = color.new(0,255,0) azul = color.new(0,0,255) amarillo = color.new(255,255,0) while true do controls.read() if controls.up() then screen.print(10,10,"Estás presionando: Arriba") elseif controls.down() then screen.print(10,10,"Estás presionando: Abajo") elseif controls.right() then screen.print(10,10,"Estás presionando: Derecha") elseif controls.left() then screen.print(10,10,"Estás presionando: Izquierda") end if controls.triangle() then screen.print(10,40,m.."Triángulo",rojo) end if controls.cross() then screen.print(10,55,m.."Equis",verde) end if controls.circle() then screen.print(10,70,m.."Círculo",azul) end if controls.square() then screen.print(10,85,m.."Cuadrado",amarillo) end screen.flip() end
Listo, con eso ya pueden hacer un Button Tester, fácil ¿verdad? xD
Hay otras funciones más sobre controles, en esta ocasión usamos controls.BOTON(), pero también disponemos de:
controls.press("BOTON") controls.release("BOTON")
Estas funciones indican si se acaba de presionar dicho botón (press), o si se lo acaba de soltar (release).
Dos cosas más que debo agregar, suponiendo que se quiere poner comillas al imprimir, por ejemplo que diga en pantalla: Estás presionando: "Arriba", pues bien, para lograr esto, existen dos formas:
"Estás presionando: \"Arriba\"" -- la barra invertida \ es para que lua no crea que queremos terminar la cadena, sino que queremos imprimir el caracter a continuación 'Estás presionando: "Arriba"' -- usando comillas simples, se pueden poner comillas dobles dentro sin problemas
Así mismo para comillas simples, habría que usar \' o comillas dobles para el texto y simples para mostrar.
Y lo segundo... se habrán dado cuenta lo molesto que estar saliendo al XMB para poder grabar el código nuevo, pues ahora que sabemos el uso de controles podemos agregar esto al final del bucle, justo antes del end:
if controls.start() then broke() end
La función broke, es una función no existe, así que con este código al presionar Start, forzaremos un error (Disfruten de la animación de la pantalla de error, creada por DeViaNTe jeje) dejándonos activar el USB con Cuadrado y así podremos guardar sin salir, y luego simplemente reiniciar con X, claro que en lugar de start podrían usar otro botón o alguna combinación de botones como "controls.l() and controls.cross()" o lo que deseen. Asimismo, la función broke podría llevar el nombre de cualquier otra que no exista, podría poner por ejemplo: Chimecho() xD.
Eso ha sido todo por hoy, cualquier duda que tengan, pregunten por comentarios...
Saludos!
Comentarios
muy buen tuto
esta bien expliacado gracias por el trabajo que haces
duda
oiie no logro activar el usb con el cuadrado (como ya veras soy un n00b en esto de la programacion Lua)
si me pudieras ayudar
PD: tu tutoriales son exelentes
arrgh fallo
aver he hecho todo hasta el principio de la variable. No me deja iniciarlo llaque me da un fallo, aqui dejo mi codigo:
EDITADO: Arreglado ^^
ok mis fallos fueron no incluir el while true do, el
controls.read (), Y ESCRIBIR DOWN CON "M" EN VEZ DE "N". ok, a los
problemas soluciones, y cuando se cefren con algo y no vean una
solucion, traten de dejarlo 10 min, o verlo desde otro punto de vista,
en mi caso fue despejarme posteando el fallo xD
Editado:Crear hilos y comentarios duplicados incumple las Normas de la comunidad, si necesita cambiar su comentario puede usar la opcion de Editar, antes de volver a postear por favor revíse las Normas.| --Gomasz--|
Editado: El uso de palabras inadecuadas podría resultar ofensivo para ciertos usuarios y va en contra de las Normas de la comunidad, antes de volver a postear por favor revíselas.| -Viciuz-
Los comienzos son difíciles, pero cuando tu cuerpo supera su límite, la mente pide más. Recomiendo que se pasen todos por mi canal de youtube, en el cual pasarán un buen rato. Advierto que soy novato, asique por más razón pasense y dejen comentarios para que mejore. Mi canal se llama MrTalentCrazy
Aqui esta tu
Aqui esta tu fallo.
ASI NO ES ES ASI..
Editado: El uso de palabras inadecuadas podría resultar ofensivo para ciertos usuarios y va en contra de las Normas de la comunidad, antes de volver a postear por favor revíselas.| -Viciuz-
Mil veces perdón. Ok?
Pues eso, perdón ya que copié y pegé tal cual. Lo siento, si se repite ( que no pasará :) ) reporten como ofensivo y así aprendere. Pero nada personal, ¿No? pues ala, todos contentos hehe
Los comienzos son difíciles, pero cuando tu cuerpo supera su límite, la mente pide más. Recomiendo que se pasen todos por mi canal de youtube, en el cual pasarán un buen rato. Advierto que soy novato, asique por más razón pasense y dejen comentarios para que mejore. Mi canal se llama MrTalentCrazy
Si no te preocupes ;) si
Si no te preocupes ;) si necesitas algo ya sabes aqui andamos saludos amigo.
Tengo una duda, y si yo kiero
Tengo una duda, y si yo kiero concatenar una variable con un punto como hago, ejemplo para que me entiendan mejor
Eso es lo que kiero hacer pero e intentado varias formas y no me sale...
Click en la imagen si kieres un avatar o una firma tan espectacular como los mios =P.
Psp 2001 Gen d3 + Memory stick 4 gb
Ps3 Fat 60GB + CFW Rebug 3.55 + Disco duro externo 250 GB+ Multiman
....
Concatenar: ..
Un punto: "." o '.' <-- es un string...
Pero esto solo se usa al imprimir, no para variables, para hacer lo que dices, sería de ponerlos en una tabla, ej:
tabla = {bola1 = image.load("bla"), bola2 = image.load("otra")};
Al crear eso, tienes tabla["bola1"] y tabla["bola2"], ahi si puedes poner tabla["bola"..1] y tabla["bola"..2]
Edito:
Acabo de recordar que todas las variables, pertenecen a una tabla, la tabla global.
En lua, esta tabla es _G, con lo cual, puedes hacer lo siguiente:
que creo que es lo que quisiste hacer arriba...
Saludos!
PSP FAT [5.00 M33-6] [6.60 ME] [Hard Moded] / Nintendo Wii [4.1U] [cIOS Hermes] [D2X cIOS] / iPhone 3G [4.2.1] [BB 05.13.04] [redsn0w] / iPod Touch 4 [6.1] [evasi0n]
07/05/10: Tuve el placer de llamarle con todo derecho "N00B" a molotovi xDDD
Recuerda: Sé el intérprete -_-
¿Por qué al agregar la función boke()
¿Por qué al agregar la función broke() solo me marca el error y no puedo ejecutar el code, es decir usar el "button tester" y si quiero cambiarlo algo al presionar start poder hacerlo, pero ahorita nadmas lo inicio y me marca el error y no puedo hacer nada.
Esto se ocupa
Esto se ocupa para probocar un error, cuando se proboca un error, puedes activar el USB y asi modificar el codigo, lo reinicias y lo pruebas. Asi no tienes que salirte de la aplicacion para conectar el USB y volver a cargar el eboot =_= xD cualquier duda comenta :D
Saludos
"Las cosas brillantes siempre salen de repente, como la geometría de una flor"
Oh
Oh, ok, ya entiendo, gracias.
Nose porque esta broke :s yo
Nose porque esta broke :s yo no lo utilizo
utilizas
if controls.press("start") then
errorporfavor()
end
:)
Pero es lo mismo, puedes usar el nombre de cualquier función mientras esta no exista. Yo uso irving()
jajaja lo de errorporfavor()
jajaja lo de errorporfavor() te lo pasé yo xD
jajaja si xD
jajaja si xD
Muy bueno Chime ;) , lo malo
Muy bueno Chime ;) , lo malo esque me tendre que leer todos los post anteriores , para repasarlos , ya que soi un novato en esto xD
Saludos y Gracias
Isaac Newton: "Lo que sabemos es una gota de agua; lo que ignoramos es el océano".
De novato se llega a
De novato se llega a intermedio de intermedio a esperto :D
=D
Grandioso Padre :D lo e logrado y lo mejor de todo le meti colores :P.
Ahora solo me falta ponerle una imagen de fondo =/ y que hagas un tutorial de un Pad Tester jajaja (que chece el pad).
Saludos. ;) Eres grandioso xD
Si te refieres al stick
Si te refieres al stick analogico es tan fácil como eso:
Felicitaciones
Pos nada tu post esta ***** y estare a la espera de mas clases y ojala pueda aprender pronto a hcer mi propio HOMEBREW ya que tengo muchas ideas en la cabeza, mientras leere un poco el manual
Saludos
Editado: El uso de palabras inadecuadas podría resultar ofensivo para ciertos usuarios y va en contra de las Normas de la comunidad, antes de volver a postear por favor revíselas.| Gomasz--|
Muy bueno chime :D
Muy bueno chime :D