Anuncios Google

Uso de sprites

Tutoriales Avanzados Homebrewes

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

Función derecha:

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

Función izquierda:

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

Función arriba:

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

Función abajo:

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.

FAQS

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.

4.31183
Tu voto: Ninguno Votos totales: 4.3 (93 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 Infected ?

Buen aporte :D solamente que

Buen aporte :D solamente que se escrive Octava no Ocataba XD

Imagen de eduardo 960

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

Imagen de pspgorrister

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:

--Dirección derecha
 
MAX_FRAMES = 8;  --Olvidamos los números mágicos ;-)
sd = {}
for (n=1; n <= MAX_FRAMES; n = n +1) then
   sd[n] = pge.texture.load("./der/"..n..".png", PGE_RAM)
end

Y la función derecha, se podría resumir en:

function sprd()
   if pge.controls.held(PGE_CTRL_RIGHT) then
      idx = 1;
      if pasosd >= 80 then
         pasosd = 0
      end
      if pasosd >0 then
         idx = math.floor(pasosd/10)
      end
   end
   sprite = sd[idx]
end

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.

Imagen de P22

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

Imagen de pspgorrister

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.

Imagen de eduardo 960

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

Imagen de pspgorrister

ceil!

Muchas gracias, me había quedado en blanco respecto a eso. Sería ceil en lugar de floor

Un saludo.

Imagen de Guillermo_Cornielle

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

Imagen de Monty - Calabato64

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

Imagen de Jepte

busca en google en imagenes,

busca en google en imagenes, busca "script"  y te van a salir varias.

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.