Anuncios Google

Button Tester, Concatenación de Strings y Colores

Tutoriales Avanzados Homebrewes

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:

  1. La coordenada en X que será 10.
  2. La coordenada en Y que varía para que el texto no se monte uno sobre otro.
  3. El texto a imprimir: en Lua, para concatenar cadenas se usan dos puntos "..", de tal forma que si se tiene "hola ".."mundo", al imprimir veremos "hola mundo". En nuestro caso, m tiene el texto "Estás presionando: " y lo concatenamos con los nombres de los botones respectivos
  4. El color creado con color.new.

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!

4.289475
Tu voto: Ninguno Votos totales: 4.3 (76 votos)

Anuncios Google

Comentarios

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

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

Imagen de TALENT CRAZY

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:

if controls.up () then
 
screen.print (10,10,"pulsastes arriba *******")
 
elseif controls.dowm () then
 
screen.print (15,15,"pulsastes abajo Wei")
 
elseif controls.left () then
 
screen.print (20,20,"pulsastes izquierda tio")
 
elseif controls.right () then
 
screen.print (25,25,"Wooooooow tu segundo programa pulsando ahorita derecha")
 
end
 
screen.flip ()
 
end

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

Imagen de sting18

Aqui esta tu

Aqui esta tu fallo.

 

screen.print (10,10,"pulsastes arriba ******")
ASI NO ES ES ASI..

 

screen.print (10,10,"revisa las normas *******")

 

 

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-


Imagen de TALENT CRAZY

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

Imagen de sting18

Si no te preocupes ;) si

Si no te preocupes ;) si necesitas algo ya sabes aqui andamos saludos amigo.

Imagen de Nevado0

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

bola1=image.load.....
bola2=image.load....
 
a = 1
 
while true do
 
bola..a:blit(bola..a...x,bola..a...y)
end

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

Imagen de Chimecho

....

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:

bola1= {img = image.load....., x = 0, y = 0}
bola2 = {img = image.load....., x = 10, y = 10}
 
a = 1
 
while true do
    _G["bola"..a].img:blit(_G["bola"..a].x, _G["bola"..a].y)
end

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

Imagen de barney77

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

Imagen de cam-maker

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"


Imagen de barney77

Oh

Oh, ok, ya entiendo, gracias.

Imagen de NauTiluS1

Nose porque esta broke :s yo

Nose porque esta broke :s yo no lo utilizo

Imagen de iRVing_Prog

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

Imagen de NauTiluS1

jajaja si xD

jajaja si xD

Imagen de Psprekiem

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

Imagen de NauTiluS1

De novato se llega a

De novato se llega a intermedio de intermedio a esperto :D

Imagen de Samuelfrm

=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


Twitter

Si te refieres al stick

Si te refieres al stick analogico es tan fácil como eso:

 

screen.print(10,100,"Analog X: "..controls.analogx())
 
screen.print(10,120,"Analog Y: "..controls.analogy())

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

Imagen de klozz

Muy bueno chime :D 

Muy bueno chime :D 

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.