Anuncios Google

Un nuevo tutorial de Lua, desde lo básico a lo concreto [8º Entrega][Button tester, concatenación de strings, y colores]

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...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. Así mismo, 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!



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


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.

cuando

cuando otro tuto  todos  los dias  checo  .. la emocion =D

Imagen de Chimecho

Pues...

La 9º entrega está en el Foro de programación desde hace días...

Saludos!

jijijij

amigo.  los errosres que pusis7e aki , los as pues70 a proposi7o?? =D

 

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)
naranja = 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",morado)
end
if controls.cross() then
screen.print(10,55,m.."Equis",naranja)
end
if controls.circle() then
screen.print(10,70,m.."Círculo",blanco)
end
if controls.square() then
screen.print(10,85,m.."Cuadrado",gris)
end
 
screen.flip()
end

 

por si no es fija7e que los colores con concuerdan  solo concuerda el naranja  ,pero es amarillo  jeje  , gracias a es7e error me di cuen7a e unas cosi7as :D gracias

-

.

 

Imagen de Chimecho

see, tienes razón

Ya lo he corregido, gracias por el aviso, lo que pasa es que originalmente iba a poner los 8 textos con color, pero al final decidí dejar sólo 4...

En fin, quiero decirte que poner el código así, se ve horrible. En el editor hay un botón para agregar código, y además, te recomendaré que la próxima vez pongas sólo la parte donde está el error, en este caso, podrías haber puesto algo así:

Tu declaras los colores:

rojo = color.new(255,0,0)
verde = color.new(0,255,0)
azul = color.new(0,0,255)
naranja = color.new(255,255,0)

Pero luego haces:

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",naranja)
end

 

Así se ve todo más ordenado y comprensible :)

PD: Sobre el código del naranja (que es amarillo xD), me he confundido porque combiné los colores mentalmente y no probé el código (fallo mío) jeje

Saludos y gracias!



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

oie

en que lenguage lo pones para salir haci??

Imagen de barney77

WTF!?

WTF!?, ¿Por qué dices que los colores no concuerdan?, si concuerdan :S

fijate bien , iserta esos codigos

  iserta esos codigos ,  i presiona  circulo , cuadro , triangulo  te tira error    ,  pork??  pues pork los colores no concuerdan solo concuerda el naranja pero no es naranja (es amarillo ,´´X´´)   solo fijate bien o.O  i si no me crees solo copia i pega los codigo si editarlos i veras que te manda error con esas 3 teclas 

 

la solucion es 

 

m = "Estás presionando: "
rojo = color.new(255,0,0)
verde = color.new(0,255,0)
azul = color.new(0,0,255)
naranja = color.new(234,0,88)
 
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",naranja)
    end
    if controls.circle() then
        screen.print(10,70,m.."Círculo",azul)
    end
    if controls.square() then
        screen.print(10,85,m.."Cuadrado",verde)
   
        end
    
    screen.flip()
end

 

ahora si los colores concuerdan  ,  fijate bien =D

 

Imagen de barney77

Bueno

Bueno tienes razón no se que le paso a Chime, saludos.

jeje

xD

Imagen de ANI-KIBA

Como siempre gracias :D

Muchisimas gracias!!

Imagen de Tsukiumi

Ya lo

Ya lo estoy haciendo en una noticia nueva junto con el 7, y que bien, ahora si que venga el 9, que yo me quedé justo en lo que haces en este xD

Lo último que me enseñaste a usar fue lo de "elseif" ¬¬


Imagen de Chimecho

:O

Tu estás pasando a portada el tutorial? :O

Genial, la próxima será sobre imágenes y... no se, tendré que ver otros tutoriales a ver que sigue xD



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

Ideas:

Para el 9, uso de imágenes (y sprites, claro). Después, para el 10, uso de sonidos. Para el 11, con el objetivo de aplicar lo aprendido, tocaría hacer el típico arkanoid (con imágenes, o con el módulo de dibujo) y un juego de plataforma (un mario xD)

Saludos, chime. Es bueno tenerte de vuelta por esta tu casa ;)

Imagen de Tsukiumi

Estos

Estos si los pasaré yo, los primeros los pasó moikop, y los últimos Lord Hades.

Imagen de barney77

Te recomiendo

Te recomiendo que después de ese de las imagenes, manejes arrays,después funciones de movimiento y esas cosas( math.atan,mat.cos etc),después los comandos operativos(+,-,/,*,OR,etc),después como manejar archivos en LUA, después como cargar sonido =).

 

Saludos.

Imagen de iRVing_Prog

Me vienen excelentes

estos tutoriales ahora que estoy aprendiendo Lua Dev

Sólo una cosa, ya mas o menos conozco lo que has mostrado hasta ahora, gracias a xerpi  y unas cuantas horas de lectura =)

Pero ya van dos ocasiones donde me da un error sin sentido:

Atención: Error del sistema

Linea¿?

¿?

Como interpreto eso xD

Espero me puedan ayudar, el código esta perfectamente escrito.

PD: estoy portando desde 0 el código de "El clic Rápido"


 

Imagen de Chimecho

Difícil...

Esa pantalla de error aun no está pulida al 100% (¬¬' DeViaNTe), lo mejor sería que vallas haciendo log de lo que sea que hagas... podrías usar el script de pspgorrister

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 DeViaNTe

okok...

Reseteando a errores de serie... xD thinking alternative ways... xD
dadme 3 dias y pondré algo a la vista :P

Yo simplemente uso un eboot

Yo simplemente uso un eboot mas antiguo donde sale el error y es mas rapido de conectar usb.

Imagen de iRVing_Prog

Es desesperante

que pase lo mismo, no se que hay que hacer, ya pase todos los archivos cerca de 10 veces no creo que tantas pasen como corruptos >:(

y la forma de depurar es algo engorrosa, pero vere si la puedo implementar.

Aunque aun no se como es, osea en ocasiones sale? y en otras no? o en que me baso para saber que necesito arreglar.

Edito: Se me olvido comentar que el error no lo da al presionar algun boton o realizar alguna tarea en el programa, si no que no lo inicia, simplemente muestra eso y ya.

Nota: Encontre el error, algo raro image.blit(fondo,0,0) estaba como image.blit(0,0,fondo)


 

Imagen de Chimecho

ah...

Supongo que no está implementada la parte que reconoce si se le envía number o userdata como primer parámetro, por eso yo prefiero hacer imagen:blit(0,0)



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

Una pregunta

Primero me disculpo por mi ignorancia, pero este tutorial para que interprete de Lua es, la logica podria aplicarla siempre, pero especificamente para cual es? 

Saludos


"Las cosas brillantes siempre salen de repente, como la geometría de una flor"


El mejor interprete que

El mejor interprete que existe.(le da mil vueltas al HM)

Imagen de Chimecho

Este...

Lee la primera línea de este post .__.

Saludos...

Imagen de cam-maker

xD

Perdon :$

buen tutorial (: sigue asi ^^

Imagen de barney77

Bién explicado

Bien explicado chime (Y)

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.