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:
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 -_-
cuando
cuando otro tuto todos los dias checo .. la emocion =D
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
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
-
.
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:
Pero luego haces:
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??
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
Bueno
Bueno tienes razón no se que le paso a Chime, saludos.
jeje
xD
Como siempre gracias :D
Muchisimas gracias!!
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" ¬¬
: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 ;)
Estos
Estos si los pasaré yo, los primeros los pasó moikop, y los últimos Lord Hades.
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.
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"
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 -_-
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.
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)
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 -_-
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)
Este...
Lee la primera línea de este post .__.
Saludos...
xD
Perdon :$
buen tutorial (: sigue asi ^^
Bién explicado
Bien explicado chime (Y)