En esta ocataba entrega dedicada a Lua PGE me gustaría remarcar el uso de los sprites individuales y no en plantilla puesto que en los samples de la noticia Phoenix Game Engine ya viene un ejemplo del uso de sprites en plantilla. En este tutorial quiero remarcar también que el código de este tutorial se basa a partir del tutorial que hizo Tanos también sobre el uso de sprites, pero en Lua.
Comencemos a cargar las variables:
--Dirección derecha s1d = pge.texture.load("./der/1.png", PGE_RAM) s2d = pge.texture.load("./der/2.png", PGE_RAM) s3d = pge.texture.load("./der/3.png", PGE_RAM) s4d = pge.texture.load("./der/4.png", PGE_RAM) s5d = pge.texture.load("./der/5.png", PGE_RAM) s6d = pge.texture.load("./der/6.png", PGE_RAM) s7d = pge.texture.load("./der/7.png", PGE_RAM) s8d = pge.texture.load("./der/8.png", PGE_RAM
--Dirección arriba: s1a = pge.texture.load("./arb/1.png", PGE_RAM) s2a = pge.texture.load("./arb/2.png", PGE_RAM) s3a = pge.texture.load("./arb/3.png", PGE_RAM) s4a = pge.texture.load("./arb/4.png", PGE_RAM) s5a = pge.texture.load("./arb/5.png", PGE_RAM) s6a = pge.texture.load("./arb/6.png", PGE_RAM) s7a = pge.texture.load("./der/7.png", PGE_RAM) s8a = pge.texture.load("./arb/8.png", PGE_RAM)
--Dirección izquierda: s1i = pge.texture.load("./izq/1.png", PGE_RAM) s2i = pge.texture.load("./izq/2.png", PGE_RAM) s3i = pge.texture.load("./izq/3.png", PGE_RAM) s4i = pge.texture.load("./izq/4.png", PGE_RAM) s5i = pge.texture.load("./izq/5.png", PGE_RAM) s6i = pge.texture.load("./izq/6.png", PGE_RAM) s7i = pge.texture.load("./izq/7.png", PGE_RAM) s8i = pge.texture.load("./izq/8.png", PGE_RAM)
--Dirección abajo: s1b = pge.texture.load("./aba/1.png", PGE_RAM) s2b = pge.texture.load("./aba/2.png", PGE_RAM) s3b = pge.texture.load("./aba/3.png", PGE_RAM) s4b = pge.texture.load("./aba/4.png", PGE_RAM) s5b = pge.texture.load("./aba/5.png", PGE_RAM) s6b = pge.texture.load("./aba/6.png", PGE_RAM) s7b = pge.texture.load("./aba/7.png", PGE_RAM) s8b = pge.texture.load("./aba/8.png", PGE_RAM)
IMPORTANTE:
--Aunque sea una tontería no os olvidéis el alpha a 255 o sino el sprite no se verá. alpha = 255
Una vez cargadas las texturas debemos de dar una serie de variables y condiciones dando a entender la "X" y la "Y" para que nuestro sprite se mueva.
--Definimos en forma de tabla X e Y. S={} S[1]={x=20,y=100} sprite=s1n pasosd=0 pasosi=0 pasosa=0 pasosb=0
Ahora tendriamos que hacer las funciones como: el movimiento y una funcion por dirección.
function mov() if pge.controls.held(PGE_CTRL_RIGHT) then S[1].x = S[1].x +1 pasosd = pasosd + 2 end if pge.controls.held(PGE_CTRL_LEFT) then S[1].x = S[1].x -1 pasosi = pasosi + 2 end if pge.controls.held(PGE_CTRL_UP) then S[1].y = S[1].y -1 pasosa = pasosa + 2 end if pge.controls.held(PGE_CTRL_DOWN) then S[1].x = S[1].x +1 pasosb = pasosb + 2 end end
function sprd() if pasosd >= 0 and pasosd < 10 and pge.controls.held(PGE_CTRL_RIGHT) then sprite=s1d end if pasosd >= 10 and pasosd < 20 and pge.controls.held(PGE_CTRL_RIGHT) then sprite=s2d end if pasosd >= 20 and pasosd < 30 and pge.controls.held(PGE_CTRL_RIGHT) then sprite=s3d end if pasosd >= 30 and pasosd < 40 and pge.controls.held(PGE_CTRL_RIGHT) then sprite=s4d end if pasosd >= 40 and pasosd < 50 and pge.controls.held(PGE_CTRL_RIGHT) then sprite=s5d end if pasosd >= 50 and pasosd < 60 and pge.controls.held(PGE_CTRL_RIGHT) then sprite=s6d end if pasosd >= 60 and pasosd < 70 and pge.controls.held(PGE_CTRL_RIGHT) then sprite=s7d end if pasosd >= 70 and pasosd < 80 and pge.controls.held(PGE_CTRL_RIGHT) then sprite=s8d end if pasosd >= 80 then pasosd=0 end end
function spri() if pasosi >= 0 and pasosi < 10 and pge.controls.held(PGE_CTRL_LEFT) then sprite=s1i end if pasosi >= 10 and pasosi < 20 and pge.controls.held(PGE_CTRL_LEFT) then sprite=s2i end if pasosi >= 20 and pasosi < 30 and pge.controls.held(PGE_CTRL_LEFT) then sprite=s3i end if pasosi >= 30 and pasosi < 40 and pge.controls.held(PGE_CTRL_LEFT) then sprite=s4i end if pasosi >= 40 and pasosi < 50 and pge.controls.held(PGE_CTRL_LEFT) then sprite=s5i end if pasosi >= 50 and pasosi < 60 and pge.controls.held(PGE_CTRL_LEFT) then sprite=s6i end if pasosi >= 60 and pasosi < 70 and pge.controls.held(PGE_CTRL_LEFT) then sprite=s7i end if pasosi >= 70 and pasosi < 80 and pge.controls.held(PGE_CTRL_LEFT) then sprite=s8i end if pasosi >= 80 then pasosi=0 end end
function spra() if pasosa >= 0 and pasosa < 10 and pge.controls.held(PGE_CTRL_UP) then sprite=s1a end if pasosa >= 10 and pasosa < 20 and pge.controls.held(PGE_CTRL_UP) then sprite=s2a end if pasosa >= 20 and pasosa < 30 and pge.controls.held(PGE_CTRL_UP) then sprite=s3a end if pasosa >= 30 and pasosa < 40 and pge.controls.held(PGE_CTRL_UP) then sprite=s4a end if pasosa >= 40 and pasosa < 50 and pge.controls.held(PGE_CTRL_UP) then sprite=s5a end if pasosa >= 50 and pasosa < 60 and pge.controls.held(PGE_CTRL_UP) then sprite=s6a end if pasosa >= 60 and pasosa < 70 and pge.controls.held(PGE_CTRL_UP) then sprite=s7a end if pasosa >= 70 and pasosa < 80 and pge.controls.held(PGE_CTRL_UP) then sprite=s8a end if pasosa >= 80 then pasosa=0 end end
function sprb() if pasosb >= 0 and pasosb < 10 and pge.controls.held(PGE_CTRL_DOWN) then sprite=s1b end if pasosb >= 10 and pasosb < 20 and pge.controls.held(PGE_CTRL_DOWN) then sprite=s2b end if pasosb >= 20 and pasosb < 30 and pge.controls.held(PGE_CTRL_DOWN) then sprite=s3b end if pasosb >= 30 and pasosb < 40 and pge.controls.held(PGE_CTRL_DOWN) then sprite=s4b end if pasosb >= 40 and pasosb < 50 and pge.controls.held(PGE_CTRL_DOWN) then sprite=s5b end if pasosb >= 50 and pasosb < 60 and pge.controls.held(PGE_CTRL_DOWN) then sprite=s6b end if pasosb >= 60 and pasosb < 70 and pge.controls.held(PGE_CTRL_DOWN) then sprite=s7b end if pasosb >= 70 and pasosb < 80 and pge.controls.held(PGE_CTRL_DOWN) then sprite=s8b end if pasosb >= 80 then pasosb=0 end end
Una vez hechas las variables y las funciones pasaremos a hacer la función principal del programa:
while true do pge.controls.update() pge.gfx.startdrawing() pge.gfx.clearscreen() mov() sprd() spri() spra() sprb() pge.texture.activate(sprite) pge.texture.draweasy(sprite, S[1].x,S[1].y, 0, alpha) pge.gfx.enddrawing() if pge.controls.pressed(PGE_CTRL_START) then pge.exit() end pge.gfx.swapbuffers() end sprite = nil
Si os mirasteis el primer tutorial sabréis que son las siguientes funciones:
pge.texture.activate(sprite) pge.texture.draweasy(sprite, S[1].x,S[1].y, 0, alpha)
Al principio habiamos dado valor s1d...., s1i....., s1a....., s1b..... a sprite con lo cual si activamos el valor sprite como a textura entonces activará todos los movimientos y hará posible el cambio de sprite para cada instante.
NOTA: El resultado será el mismo que en el tutorial de Tanos sobre el uso de sprites, pero, con la diferencia que en este tutorial hay dos nuevos comandos y controles diferentes.
P: ¿Por qué utilizo "while true do" en vez de "while pge.running() do"?
R: Ya se que en el primer tutorial remarqué que se tenía que utilizar "while pge.running() do" en vez de "while true do" pero, he de decir que funciona igual. Podéis utilizar los dos comenzamientos de bucle.
P: ¿No se ve la imagen?
R1: Mira que no hayas puesto alpha.
R2: Mira que hayas puesto el alpha a 0.
Comentarios
Buen aporte :D solamente que
Buen aporte :D solamente que se escrive Octava no Ocataba XD
Está muy bien el tutorial,
Está muy bien el tutorial, es muy fácil la programación en LUA, posiblemente me inicie a programar en este lenguaje o en C
Saludos
Blog de un programador: http://www.eduardo960.co.cc
Boseto: http://www.comunidadgm.org/index.php?topic=116.0
RaceBall: http://www.comunidadgm.org/index.php?topic=7352.0
SceneChat: http://www.comunidadgm.org/index.php?topic
Me parece increíble que no
Me parece increíble que no uséis vectores para cada frame, sino X variables, eso es PROGRAMAR MAL. Por ejemplo, tu primer código salvando errores de sintaxis que pueda yo tener por descocimiento de Lua, podría ser tan sólo:
Y la función derecha, se podría resumir en:
El uso de vectores hace un código mucho más ligero, y ampliable. Os invito a que investiguéis por vuestra cuenta.
Y el resto del código, más de lo mismo...
Un saludo.
PD: creo que la funcion floor devuelve el mayor entero redondeando hacia arriba, (es decir 1.1 sería 2). Esa es la función que busco.
LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.
Podrías hacer algun
Podrías hacer algun tutorial sobre el tema? Esque yo así no me entero de nada y a muchos nos ayudarías un monton.
¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.
Mi review: iPod Touch 4G
Tutorial
Bueno, hay 2 motivos por el que no voy a hacer un tuto, el primero es que por decisiones personales, he decidido no crear más tutoriales, y el segundo es que yo no se Lua, entiendo parte de su sintaxis y alguna funciones, pero tampoco me veo haciendo un tuto referido expresamente a Lua
De todas formas seguro que en internet hay algo sobre este tema, si encuentro algo lo postearé aquí.
LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.
floor: Devuelve el número
floor: Devuelve el número redondeado próximo hacia atras (ej. 1.1 = 1)
ceil: Devuelve el número redondeado próximo hacia adelante (ej. 1.1 = 2)
round: Devuelve el número redondeado más cercano (ej. 1.4 = 1 ó 1.6 = 2)
Saludos ;)
Blog de un programador: http://www.eduardo960.co.cc
Boseto: http://www.comunidadgm.org/index.php?topic=116.0
RaceBall: http://www.comunidadgm.org/index.php?topic=7352.0
SceneChat: http://www.comunidadgm.org/index.php?topic
ceil!
Muchas gracias, me había quedado en blanco respecto a eso. Sería ceil en lugar de floor
Un saludo.
Wao
Me sorprende la forma en que haces que se carguen todas las imagenes con tan solo usar un solo ''pge.texture.load'', me gustaria intentar eso a ver si se cargan todas las imagenes de esa forma xDD.
Ahora respecto al tuto, esto para recoco, lo veo un poco inecesario, ya que es lo mismo que el tuto de tanos, tan solo hay que adaptarlo a pge que, si ya saben las fuciones de pge, no sera dificil adaptarlo.
Saludos.
Manual del Perfecto Votante Para un voto libre y justo!.
TheGCProjects
Lo del while true do se
Lo del while true do se avisa antes xDD
Alguien save alguna manera de mostrar una imagen y que a los 5 seg cargué otro script??, es para el splash de scenery, yo se hacerlo en HM, pero quiero la libreria vlf.
- Monty (anteriormente, Calabato64)
necesito un script de un spriter funcionando
estoy creando un juegazo en este motor y pues alguien podria pasarme un script ya hecho que funciona un esprite en pantalla, con un fondo y un arbol porfavor, solo necesito un ejemplo lo de mas puedo hacerlo. excepto. que por ejempro nuestro sprite tenga enfrente un arbol. y necesito saber como hacer para que no pase encima del arbol. y pues me baje el homebrew de lo ejemplos pero no entiendo nada de algunos ejemplos ya que soy nuevo solo me se unas dos que tres cosas. espero puedan ayudarme gracias de antemano.
PD: agradecere al que me ayude poniendo su nombre en los creditos de mi juego.
PD2: si quieres ayudarme en el proyecto contactame con MP en esta direccion : http://daxhordes.org/forum/viewtopic.php?f=33&t=7626
gracias de antemano y saludos
busca en google en imagenes,
busca en google en imagenes, busca "script" y te van a salir varias.