Anuncios Google

Comandos mas importantes de LUA PGE

Tutoriales Avanzados Homebrewes

El nuevo interpretador de Lua tiene los siguientes cambios importantes:

  • No podemos aplicar el código antiguo de Lua player o HM en el PGE.
  • No podemos utilizar cualquier eboot, tiene que ser obligatoriamente el que viene con la descarga.
  • No podemos utilizar el eboot de PGE en Lua player ni en HM.

Hasta aquí lo que es necesariamente importante saber antes de empezar.

Para el uso de los diferentes código de Lua PGE se tiene que utilizar OBLIGATORIAMENTE el eboot de esta noticia.


pge.running(), pge.delay() y  pge.exit() --Funciones del Sistema--


  1. Todo "while" o bucle tiene que empezar por "while pge.running() do" en vez de "while true do".
  2. Por la norma general se utiliza "break" o "System.Quit()", pero, aquí se utiliza "pge.exit()" o "break" para salir del bucle o finalizar el bucle.
  3. Normalmente utilizabamos "screen.waitVblankStart()" para hacer una pausa de tantos milisegundos, pero ahora se utiliza "pge.delay()".

Ejemplos:

texture = pge.texture.load("./fotos/foto.png", PGE_RAM)
 
while pge.running() do
 
pge.controls.update()
 
pge.gfx.startdrawing()
 
pge.gfx.clearscreen()
 
pge.texture.activate(texture)
 
pge.texture.draweasy(texture, 100, 100, 0, alpha)
 
pge.delay(20)
 
pge.gfx.enddrawing()
 
pge.gfx.swapbuffers()
 
if pge.controls.pressed(PGE_CTRL_START) then
 
pge.exit()
 
end
 
end 


pge.update.controls()


  1. Normalmente se utilizaba "pad = Controls.read()", pero, ahora se utiliza "pge.controls.update()".
  2. Normalmente se utilizaba "if pad:cross() and oldPad:cross() ~= pad:cross() then" para una sola pulsación, añadiendo primeramente  "oldPad = Controls.read()", pero, ahora en vez de utilizar esos dos comandos se utilza "if pge.controls.pressed(PGE_CTRL_CROSS) then".
  3. Para hacer que se repetieran las pulsaciones solamente hacía falta poner "if pad:cross() then", pero, ahora se utiliza "if pge.controls.held(PGE_CTRL_CROSS)". Aquí esta la diferencia entre "pressed" y "held".

Controles held (Repetición de pulsaciones):

if pge.controls.held(PGE_CTRL_LTRIGGER)
if pge.controls.held(PGE_CTRL_RTRIGGER)
if pge.controls.held(PGE_CTRL_CROSS)
if pge.controls.held(PGE_CTRL_SQUARE)
if pge.controls.held(PGE_CTRL_TRIANGLE)
if pge.controls.held(PGE_CTRL_CIRCLE)
if pge.controls.held(PGE_CTRL_START)
if pge.controls.held(PGE_CTRL_SELECT) 

Controles pressed (Una sola pulsación):

if pge.controls.pressed(PGE_CTRL_LTRIGGER)
if pge.controls.pressed(PGE_CTRL_RTRIGGER)
if pge.controls.pressed(PGE_CTRL_CROSS)
if pge.controls.pressed(PGE_CTRL_SQUARE)
if pge.controls.pressed(PGE_CTRL_TRIANGLE)
if pge.controls.pressed(PGE_CTRL_CIRCLE)
if pge.controls.pressed(PGE_CTRL_START)
if pge.controls.pressed(PGE_CTRL_SELECT) 

Ejemplos:

while pge.running() do
 
page.controls.update()
 
if pge.controls.pressed(PGE_CTRL_START)
 
break
 
end
 
if pge.controls.pressed(PGE_CTRL_CROSS)
 
dofile("archivo.lua")
 
end
 
if pge.controls.held(PGE_CTRL_START)
 
--funcion dispara-- (Disparar repetidamente sin soltar el boton)
 
end
 
end


Texture --Dibujar en Pantalla--


Modo pge.texture:

  1. Nosotros utilizábamos "archivo = Image.load(./fotos/fot.png")" pero ahora se utiliza "archivo = pge.texture.load("foto.png", PGE_RAM, true)".
  2. En vez de "screen:blit()" se utiliza "pge.texture.draweasy()"
  3. En vez de "archivo = Image.createEmpty()" se utiliza "pge.texture.create()"
  4. En vez de "archivo:width()" y "archivo:height()" se utiliza "pge.texture.width()" y "pge.texture.height()".
  5. Cargamos desde la memoria de la PSP "pge.texture.loadmemory()".
  6. Para poder imprimir las imagenes en pantalla necesitamos  "pge.texture.activate()".
  7. Para cambiar del modo screen al modo texture: "pge.texture.settarget()"
  8. Hacer capturas de pantalla y guardarlas en formato PNG: "pge.texture.save()"

Modo pge.gfx:

  1. Al comenzamiento del bucle siempre se pone "pge.gfx.startdrawing()".
  2. Al final de la última impresión en pantalla se pone "pge.gfx.enddrawing()".
  3. Siempre se tiene que poner después del "pge.gfx.enddrawing()": "pge.gfx.swapbuffers()".
  4. Para crear un color en vez de "white = Color.new(255,255,255)" se utiliza "white = pge.gfx.createcolor(255,255,255)".
  5. En vez de "screen:clear(white)" se pone "pge.gfx.clearscreen(white)".
  6. Para regresar al modo screen se pone después de haber utilizado "pge.texture.settarget()": "pge.gfx.rendertoscreen()"
  7. Crear figuras geométricas:
    1. Una linia: pge.gfx.drawline()
    2. Una estrella: pge.gfx.drawstar()
    3. Un círculo: pge.gfx.drawcircle()
    4. Un rectángulo: pge.gfx.drawrect()
  8. Hacer una captura de pantalla en PNG: pge.gfx.screenshot()

ATENCIÓN: Es necesario poner pge.gfx.startdrawing() al comenzamiento del bucle y pge.gfx.enddrawing() al final de la ultima impresión en pantalla, sino no funcionará ninguna función "pge.gfx".


--Música--


Mp3:

  1. En vez de "Mp3me.play()" es "pge.mp3.play()".
  2. En vez de "Mp3me.stop()" es "pge.mp3.stop()". Esto para totalmente el Mp3.
  3. Podemos hacer una pausa: "pge.mp3.pause()".
  4. En el bucle podemos decir si queremos o no que reproduzca el Mp3: "pge.mp3.loop(false/true)"
  5. Podemos mesurar el volumen: pge.mp3.volume(). El valor debe de estar entre 0 y 100000.
  6. Almacenamos información del Mp3: "pge.mp3.getinfo()"
    1. Titulo: pge.mp3.title()
    2. Artista: pge.mp3.artist()
    3. Álbum: pge.mp3.album()
    4. Año: pge.mp3.year()

Es necesario:

mp3info = pge.mp3.getinfo()


mp3title = mp3info:title()
 
mp3title = pge.mp3.title(mp3info)


artist = mp3info:artist()
 
artist = pge.mp3.artist(mp3info)


album = mp3info:album()
 
album = pge.mp3.album(mp3info)


year = mp3info:year() 
 
year = pge.mp3.year(mp3info)


Wav: 

Solamente tenéis que sustituir mp3 por wav: pge.mp3.play() --------> pge.wav.play()


Timers


Crear timer:

pge.timer.create()

Actualizar temporizador o reanudar el temporizador:

pge.timer.update()

Ejemplo:

reloj = pge.timer.create()
 
if not reloj then
 
error("Fuera de tiempo.")
 
end
 
if reloj < 1000 then
 
pge.timer.update(reloj)
 
end

4.450705
Tu voto: Ninguno Votos totales: 4.5 (71 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.

gente

En lo del sonido, donde se pone el directorio y el nombrte de archivo?

Yo lo intenté asi, pero no funciona..."pge.mp3.play(ms0:/blahblah/musica.mp3)"

Cuál seria la traduccion de "Mp3me.load()" ?

Imagen de KH1Roxas

Ayuda!!!

Cuando pongo en algo dofile("INSTALLER.lua") esa opcion funciona, es más todo el script funciona, pero cuando le doy al comando que tiene el dofile la PSP se cuelga.

 

¿Porque es esto?

________________________________________________________________________________________________________

Este es todo el script:

Load the font, 16 pixels in height, to RAM
verdana16 = pge.font.load("verdana.ttf", 16, PGE_RAM)
 
-- Check the font loaded correctly
if not verdana16 then
	error("Failed to load font.")
end
 
-- Init the message dialog and check it was successful. Add yes and no buttons and set the highlighted button to 'No'.
if not pge.utils.msginit("Do you want to use the installer?", PGE_UTILS_MSG_DIALOG_YESNO_BUTTONS + PGE_UTILS_MSG_DIALOG_DEFAULT_BUTTON_NO) then
	error("Error on msgdialog init.")
end
 
-- Create two colors
white = pge.gfx.createcolor(255, 255, 255)
red = pge.gfx.createcolor(255, 0, 0)
 
enabled = true
pressed = -1
exittext = ""
x = 0
y = 0
counter = 0
 
-- Loop until exit requested
while pge.running() do
 
	-- Update controls
	pge.controls.update()
 
	-- Start drawing
	pge.gfx.startdrawing()
 
	-- Clear screen (to black)
	pge.gfx.clearscreen()
 
	-- Draw a rectangle
	pge.gfx.drawrect(x, y, 100, 60, red)
 
	-- If message dialog not shown draw some text
	if not enabled then
		verdana16:activate()
		verdana16:printcenter(130, white, exittext)
	end
 
	-- End drawing
	pge.gfx.enddrawing()
 
	if enabled then
		-- pge.utils.msgupdate() must be called after pge.gfx.enddrawing(), but before pge.gfx.swapbuffers()
		pressed = pge.utils.msgupdate()
 
		if pressed == PGE_UTILS_MSG_DIALOG_RESULT_YES then
			exittext = "Starting..."
			enabled = false
		dofile("INSTALLER.lua")	elseif pressed == PGE_UTILS_MSG_DIALOG_RESULT_NO then
			exittext = "Exiting now..."
		enabled = false
		break		elseif pressed == PGE_UTILS_MSG_DIALOG_RESULT_BACK then
			exittext = "Cancelled."
			enabled = false
		break	elseif pressed ~= PGE_UTILS_DIALOG_RUNNING then
			exittext = "Internal error."
			enabled = false
		end
	end
 
	-- Swap buffers
	pge.gfx.swapbuffers()
 
	-- Increment counter
	counter = counter + 1
 
	-- Set the rectangle to a random screen position
	if counter >= 60 then
		counter = 0
		x = pge.math.randfloat(0, 380)
		y = pge.math.randfloat(0, 212)
	end
 
	-- If START pressed, end
	if pge.controls.pressed(PGE_CTRL_START) then
 exittext = "User cancelled the operation, exiting now..."
		enabled = false		break
	end
 
end
 
verdana16 = nil
 
white = nil
red = nil
enabled = nil
pressed = nil
exittext = nil
x = nil
y = nil
counter = nil


                        Mi canal de YouTube: Aquí

¿Quieres hacer capturas de pantalla en tu GALAXY Ace nativamente?

Imagen de pspgorrister

Unos calvos y otros con 3 pelucas

Esta bien que hay que liberar recursos pero de nada te sirver liberar (nil) liberar datos simples como booleanos, enteros, etc. Hay que liberar estructurar complejas. como por ejemplo verdana16, el resto sobra como llevar 3 pelucas. Luego tenemos la parte contraria (la calva), crean 20 estructuras complejas y hacen un bucle 80 veces cargando imágenes sin liberarla nunca, si es que...

Sobre tu error, deberías poner el contenido de installer.lua, eso sí, usa el resaltado de sintaxis que así todo negro marea un poquito. :P

PD: Abre un nuevo hilo, sino los coders no te lo van a leer. A estas alguras sobra decirlo, ES DE CAJÓN, pero bueno....

 


LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.

Imagen de KH1Roxas

Ahh, vale.

Gracias pspgorrister.

Imagen de KH1Roxas

Duda

¿Como se haría para que fuese apareciendo el texto como tu digas?

 

O sea, que el texto apareciese por tiempo.

SOLUCIONADO :D Gracias,

SOLUCIONADO :D

Gracias, poero ya encontré el error.

"pge.mp3.play('ms0:/blahblah/musica.mp3')"

ahora sigo teniendo ese problema con el "Mp3me.load()" si qalguien pudiera ayudarme...

Imagen de Arkanist

Esta bien el tutorial y espero que sigas pero...

Para usar los controles es:

 "pge.controls.update()" en vez de "pge.update.controls()". Con el último te da un error.

Por cierto, si quieres alguna ayuda en los tutoriales de Lua PGE, avisame, que me esta encantando programar en Lua PGE.

Saludos Coder ;)

Imagen de adrian-SAYA

buen aporte recoco

espero que sigas con los tutoriales ...................

cuenta con todo el apoyo........... y gracias por tu ayuda.

Imagen de Orkseath

Muy buena información.

Lo esperaba, una pregunta, irás haciendo mas tutoriales de pge? si es así, espero encontrar mas el martes dentro de dos semanas.

Añado: 

Igual que

"if pge.controls.pressed(PGE_CTRL_SQUARE)", es para cuando se pulsa un botón, "if pge.controls.release(PGE_CTRL_SQUARE)" es para cuando se suelta el boton, tambien útil (creo que no me he equivocado)

Saludos y muchas gracias.

 


 Pordrán quitarnos nuestras vidas, pero jamas nos quitaran... Nuestra Scene!

 

Imagen de recoco

Lua PGE

Una parte del siguiente tutorial será como utilizar el pad analógico y todos los controles adicionales.

Imagen de Robione22

Tengo el honor

de ser el primero en comentar, si es que no me ganan, bueno pues felicidades por esta entrega recoco, esta muy buena y nos demuestra como dia a dia avanza el lenguaje lua.

Imagen de recoco

Gracias

Gracias por el apoyo.

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.