Anuncios Google

Imágenes, sprites, movimiento y límites

Tutoriales Avanzados Homebrewes

¡Hola! aquí estoy de nuevo escribiendo el tutorial, espero que ya le hayan dado una leída a los anteriores tutoriales, si no lo han hecho todavía, no importa, iré poniendo links en donde lo crea necesario para repasar :D

Pues bien, en esta entrega veremos como cargar imágenes, y mostrar animaciones usando sprites y arrays, en si lo que haremos es mostrar un personaje (Link) en pantalla, lo moveremos con las teclas direccionales y también haremos que colisione con los lados de la pantalla para que no se salga de límites.

Para esta práctica, he preparado unas imágenes que necesitarán para seguir el tutorial, descarga: aquí (Gracias a DeViaNTe por el trabajo de extraer los sprites :P).

Procurar que al extraer, las imágenes queden dentro de "ms0:/PSP/GAME/Tutorial/sprites/*.png" para poder seguir el tutorial al pie de la letra. Ya que tenemos todo listo, podemos empezar con el código, abran el script.

Para poder mostrar nuestro personaje, tendremos que cargar las imágenes, para esto, usaremos un array (recomiendo leer la parte de arrays antes de continuar) que tendrá todas las imágenes de manera organizada, así que, procedemos a crear la tabla:

link = {}
link["stay"]={}
link["walk"]={}

Nota: También se pudo hacer 

link={stay={}, walk={}}
 pero he preferido hacerlo de ese modo.

Con este código creamos dos arrays dentro de el array link, estos serán los que contengan los distintos objetos de imagen que usaremos, procedemos a cargar las imágenes:

link.stay.up = image.load("sprites/link_stay_up.png")
link["stay"].down = image.load("sprites/link_stay_down.png")
link.stay["right"] = image.load("sprites/link_stay_right.png")
link["stay"]["left"] = image.load("sprites/link_stay_left.png")

Sintaxis: image.load recibe un parámetro que es la ruta de la imagen a cargar, puede ser jpg, png o gif (sólo el primer frame si es una animación), de preferencia usaremos png, debido a la calidad.

Notar que la ruta no es absoluta ("ms0:/PSP/GAME/Tutorial/sprites/"), es relativa, es decir, partiendo de donde está el eboot.pbp, vamos a la carpeta sprites y cargamos las imágenes. Se recomienda acostumbrar a usar rutas relativas, para compatibilidad con plugins como Game Categories.

Notar también que he cargado de cuatro formas distintas, se puede usar la que se desee, en lo personal prefiero la 4º.

Bien, ya tenemos cargadas las imágenes para cuando link esté quieto, ahora necesitamos cargar la animación, para variar un poco, usaremos la función rawset:

rawset(link["walk"],"up",image.loadsprite("sprites/link_walk_up.png",22,27))
rawset(link["walk"],"down",image.loadsprite("sprites/link_walk_down.png",22,27))
rawset(link["walk"],"right",image.loadsprite("sprites/link_walk_right.png",22,27))
rawset(link["walk"],"left",image.loadsprite("sprites/link_walk_left.png",22,27))

Sintaxis de rawset: recibe 3 argumentos y funciona de esta forma, por ejemplo tenemos: rawset(array,posicion,valor) en realidad estamos haciendo array[posicion] = valor, sin importar que posición sea un número o una cadena de texto.

Sintaxis de loadsprite: esta función recibe 3 argumentos también, la ruta, el ancho de cada cuadro, y el alto de cada cuadro. De esta forma tendremos un solo objeto para todas las imágenes, luego para cambiar a otro cuadro de la animación usaremos setframe, que lo veremos luego.

En este punto ya tenemos todas las imágenes necesarias, pero ahora necesitaremos algunas variables para determinar el estado, la dirección, la posición en pantalla y el cuadro de la animación a mostrar:

status = "stay" -- al principio estará quieto, luego cuando se presione algo pasará a "walk" y caminará
direction = "down" -- que mire hacia abajo, asi "nos ve" xD, los otros serian "up", "left" y "right"
x = 10 -- posicion en X en la que se mostrará inicialmente
y = 10 -- posicion en Y en la que se mostrará inicialmente
anim = 0 -- cuadro de la animación actual, cuenta desde 0

Con eso ya tenemos nuestras imágenes cargadas y nuestras variables con valores iniciales, ahora a hacer el programa principal. Empezamos con un bucle infinito y lectura de controles:

while true do
	controls.read()

Como vamos a mover a nuestro personaje con las flechas (arriba, abajo, izquierda, derecha), necesitaremos un if...else...end hecho de tal forma que si se presiona una de las flechas, pase al siguiente cuadro de animación y además ponga el estado a "walk", caso contrario que resetee la animación (frame 0) y que el estado sea "stay", ahora en código:

if controls.up() or controls.down() or controls.left() or controls.right() then
	anim = anim + 1
	status = "walk"
else
	anim = 0
	status = "stay"
end

Nota: si no han comprendido la condición, recomiendo leer la parte de operaciones.

Pero falta algo más, algo específico para cada flecha, es decir, si se presiona arriba, que la posición en Y disminuya (así sube nuestro personaje), y también que la dirección cambie a "up", lo mismo para el resto pero modificando la coordenada en X o en Y según corresponda, así como la dirección:

if controls.up() then
	y=y-1
	direction = "up"
elseif controls.down() then
	y=y+1
	direction = "down"
elseif controls.right() then
	x=x+1
	direction = "right"
elseif controls.left() then
	x=x-1
	direction = "left"
end

En este punto ya tenemos el movimiento y una parte de la animación, digo una parte porque aun no hemos cambiado el frame a mostrar. El frame actual debe ser cambiado solamente cuando estemos en estado "walk", es decir, cuando nuestro personaje se mueva, por lo tanto, haremos lo siguiente:

if status=="walk" then
	link[status][direction]:setframe(anim)
end

Sintaxis: setframe recibe 2 argumentos, ¿eh? pero si sólo veo uno que dice anim. Pues veamos, setframe recibe estos argumentos:

  1. Una imagen cargada con loadsprite
  2. Frame al que se desea cambiar la animación

Ahora, en lua, las siguientes dos sentencias hacen exactamente lo mismo:

image.setframe(imagen, frame)
imagen:setframe(frame)

Es decir, al usar dos puntos, se pasa el objeto como primer argumento, por eso, aunque setframe reciba 2 argumentos, se puede omitir el primero si se usan dos puntos (si no ha quedado claro, revisar la introducción que está en la documentación)

Ya con todo esto que hemos hecho, tenemos lista nuestra imagen para ponerla en pantalla, para esto usaremos la función blit del módulo image

link[status][direction]:blit(x,y)

Sintaxis: image.blit recibe 3 argumentos, una imagen (cargada con load o con loadsprite), la coordenada en X y la coordenada en Y. Como ya vimos arriba, si usamos dos puntos, el primer argumento será la imagen que en nuestro caso es link[status][direction].

Notar que se puede usar variables en cualquier lado, ya que representan el valor que tienen asignado.

Por último, haremos el cambio de pantallas (flip), el código para forzar un error, y el end del while, con lo que el código queda así:

link = {}
link["stay"]={}
link["walk"]={}
 
link.stay.up = image.load("sprites/link_stay_up.png")
link["stay"].down = image.load("sprites/link_stay_down.png")
link.stay["right"] = image.load("sprites/link_stay_right.png")
link["stay"]["left"] = image.load("sprites/link_stay_left.png")
 
rawset(link["walk"],"up",image.loadsprite("sprites/link_walk_up.png",22,27))
rawset(link["walk"],"down",image.loadsprite("sprites/link_walk_down.png",22,27))
rawset(link["walk"],"right",image.loadsprite("sprites/link_walk_right.png",22,27))
rawset(link["walk"],"left",image.loadsprite("sprites/link_walk_left.png",22,27))
 
status = "stay" -- al principio estará quieto, luego cuando se presione algo pasará a "walk" y caminará
direction = "down" -- que mire hacia abajo, asi "nos ve" xD, los otros serian "up", "left" y "right"
x = 10 -- posicion en X en la que se mostrará inicialmente
y = 10 -- posicion en Y en la que se mostrará inicialmente
anim = 0 -- cuadro de la animación actual, cuenta desde 0
 
while true do
	controls.read()
 
	if controls.up() or controls.down() or controls.left() or controls.right() then
		anim = anim + 1
		status = "walk"
	else
		anim = 0
		status = "stay"
	end
 
	if controls.up() then
		y=y-1
		direction = "up"
	elseif controls.down() then
		y=y+1
		direction = "down"
	elseif controls.right() then
		x=x+1
		direction = "right"
	elseif controls.left() then
		x=x-1
		direction = "left"
	end
 
	if status=="walk" then
		link[status][direction]:setframe(anim)
	end
 
	link[status][direction]:blit(x,y)
 
	screen.flip()
	if controls.l() and controls.cross() then
		broke()
	end
end

Listo, a ejecutarlo se ha dicho!

Bien, lo primero que notaremos es que la animación va completamente mal xD, esto se debe a que los frames avanzan muy rápido y además de eso, no pusimos algo que regrese la animación cuando pase del décimo cuadro, para esto necesitaremos reducir el valor del aumento de anim al mover y además poner una condición que pasado de tal número, regrese:

if controls.up() or controls.down() or controls.left() or controls.right() then
	anim = anim + 0.2 -- más lento
	status = "walk"
	if math.floor(anim)>9 then -- ya mismo lo explico
		anim = 0 -- regresar al primer frame
	end
else
	anim = 0
	status = "stay"
end

Sintaxis: floor es la función piso, o de forma más clara, quita los decimales, ej: math.floor(2.165468) y math.floor(2.98474) dan como resultado: 2

Usamos esto para que al pasar el frame 10 (dice 9 porque hay que recordar que contamos desde 0) regrese a 0. Por el setframe no hay que preocuparse de que le pasamos un frame decimal, ya que según pruebas que he hecho, he llegado a la conclusión de que también redondea para abajo (math.floor).

Listo, con esto nuestro personaje casi se mueve bien, digo casi porque habrán notado que nuestro personaje se puede salir de la pantalla, para esto tendremos que poner límites para el movimiento, estos límites no son más que condiciones que pondremos justo antes de que se imprima:

if x<0 then
	x=0
elseif x+22>480 then
	x=480-22
end
 
if y<0 then
	y=0
elseif y+27>272 then
	y=272-27
end

Para entender mejor esto, he elaborado el siguiente gráfico:

Nota: Los valores 22 y 27 son el ancho y el alto de la imagen respectivamente, como son conocidos lo he puesto directamente, pero también se pueden obtener usando estas funciones:

  • image.width(imagen) o imagen:width() devuelve el ancho, en nuestro caso: 22
  • image.height(imagen) o imagen:height() devuelve el alto, en nuestro caso: 27

Dejo el código final por si acaso alguien se perdió:

link = {}
link["stay"]={}
link["walk"]={}
 
link.stay.up = image.load("sprites/link_stay_up.png")
link["stay"].down = image.load("sprites/link_stay_down.png")
link.stay["right"] = image.load("sprites/link_stay_right.png")
link["stay"]["left"] = image.load("sprites/link_stay_left.png")
 
rawset(link["walk"],"up",image.loadsprite("sprites/link_walk_up.png",22,27))
rawset(link["walk"],"down",image.loadsprite("sprites/link_walk_down.png",22,27))
rawset(link["walk"],"right",image.loadsprite("sprites/link_walk_right.png",22,27))
rawset(link["walk"],"left",image.loadsprite("sprites/link_walk_left.png",22,27))
 
status = "stay" -- al principio estará quieto, luego cuando se presione algo pasará a "walk" y caminará
direction = "down" -- que mire hacia abajo, asi "nos ve" xD, los otros serian "up", "left" y "right"
x = 10 -- posicion en X en la que se mostrará inicialmente
y = 10 -- posicion en Y en la que se mostrará inicialmente
anim = 0 -- cuadro de la animación actual, cuenta desde 0, e irá hasta 10
 
while true do
	controls.read()
 
	if controls.up() or controls.down() or controls.left() or controls.right() then
		anim = anim + 0.2
		status = "walk"
		if math.floor(anim)>9 then
			anim = 0
		end
	else
		anim = 0
		status = "stay"
	end
 
	if controls.up() then
		y=y-1
		direction = "up"
	elseif controls.down() then
		y=y+1
		direction = "down"
	elseif controls.right() then
		x=x+1
		direction = "right"
	elseif controls.left() then
		x=x-1
		direction = "left"
	end
 
	if status=="walk" then
		link[status][direction]:setframe(anim)
	end
 
	if x<0 then
		x=0
	elseif x+22>480 then
		x=480-22
	end
 
	if y<0 then
		y=0
	elseif y+27>272 then
		y=272-27
	end
 
	link[status][direction]:blit(x,y)
 
	screen.flip()
	if controls.l() and controls.cross() then
		broke()
	end
end

Listo, con ese código ya tendremos a link moviéndose por la pantalla de nuestras PSP's, y además no podrá salir de ella >=) (bwa ha ha ha)

Límites con funciones math.min() y math.max()

Ya vimos que para limitar el área por la que puede andar link, pusimos estas condiciones:

if x<0 then
	x=0
elseif x+22>480 then
	x=480-22
end
 
if y<0 then
	y=0
elseif y+27>272 then
	y=272-27
end

Pues bien, hay otra forma de hacer eso en dos líneas. En lua, disponemos de dos funciones muy útiles que son math.min() y math.max(), las dos reciben cualquier cantidad de argumentos numéricos, y devuelven el de menor valor y el de mayor valor respectivamente.

Sabiendo eso, podemos hacer que la coordenada en X tome el valor máximo entre 0 (borde izquierdo de la pantalla) y la posición actual, es decir:

x = math.max(0,x)

Pero también tenemos que verificar que no sobrepase el borde derecho, para esto usaremos math.min:

x = math.min(math.max(0,x), 480-22)

Notar que como primer argumento hemos pasado lo que ya teníamos para el borde izquierdo (math.max(0,x)), y como segundo argumento, el límite derecho, que es el borde derecho de la PSP (480) menos el ancho de la imagen (22).

Y se puede hacer lo mismo con la coordenada en Y:

y = math.min(math.max(0,y), 272-27)

Con esto nuestro código quedaría así:

link = {}
link["stay"]={}
link["walk"]={}
 
link.stay.up = image.load("sprites/link_stay_up.png")
link["stay"].down = image.load("sprites/link_stay_down.png")
link.stay["right"] = image.load("sprites/link_stay_right.png")
link["stay"]["left"] = image.load("sprites/link_stay_left.png")
 
rawset(link["walk"],"up",image.loadsprite("sprites/link_walk_up.png",22,27))
rawset(link["walk"],"down",image.loadsprite("sprites/link_walk_down.png",22,27))
rawset(link["walk"],"right",image.loadsprite("sprites/link_walk_right.png",22,27))
rawset(link["walk"],"left",image.loadsprite("sprites/link_walk_left.png",22,27))
 
status = "stay" -- al principio estará quieto, luego cuando se presione algo pasará a "walk" y caminará
direction = "down" -- que mire hacia abajo, asi "nos ve" xD, los otros serian "up", "left" y "right"
x = 10 -- posicion en X en la que se mostrará inicialmente
y = 10 -- posicion en Y en la que se mostrará inicialmente
anim = 0 -- cuadro de la animación actual, cuenta desde 0, e irá hasta 10
 
while true do
	controls.read()
 
	if controls.up() or controls.down() or controls.left() or controls.right() then
		anim = anim + 0.2
		status = "walk"
		if math.floor(anim)>9 then
			anim = 0
		end
	else
		anim = 0
		status = "stay"
	end
 
	if controls.up() then
		y=y-1
		direction = "up"
	elseif controls.down() then
		y=y+1
		direction = "down"
	elseif controls.right() then
		x=x+1
		direction = "right"
	elseif controls.left() then
		x=x-1
		direction = "left"
	end
 
	if status=="walk" then
		link[status][direction]:setframe(anim)
	end
 
	x = math.min(math.max(0,x), 480-22)
	y = math.min(math.max(0,y), 272-27)
 
	link[status][direction]:blit(x,y)
 
	screen.flip()
	if controls.l() and controls.cross() then
		broke()
	end
end

Eso ha sido todo por hoy, si han llegado hasta aquí y han comprendido todo, tal vez ya puedan hacer incluso un pong :) sin sonido claro está. Cualquier duda, dejen un comentario.

Saludos!

4.180725
Tu voto: Ninguno Votos totales: 4.2 (83 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 MWMEric

no me funciona un codigo

Hola gente, bueno hace poco que estoy con LUA (3 dias) y estaba haciendo un pong.. pero tengo problemas con las imagenes :I, al cargar 2 imagenes no muestra ninguna y luego de 1minuto con pantalla negra la psp se apaga, solo puedo cargar 1 imagen y hasta ahi..

Aqui puedo cargar 1 imagen que rebote por la pantalla

--coordenadas y velocidad de la bola --
y = 100
x = 100
dx = 2 
dy = 2
-- coordenadas y velocidad de paleta-- 
py = 10
vy = 2  
px = 10 
vx = 2 
-- imagenes.cargar.-- 
ball = image.load("ball.png")
palt = image.load("palt.png")
 
while true do
	controls.read()
 
 
 
 
 
 
if controls.r() then
		y = 100
		x = 100
		image.blit(ball,x,y)
 
		screen.flip()
end
	if ((x >= 445) or (x <= 0)) then
		dx = -dx 
end
		if ((y >= 237) or (y <= 0)) then
		dy = -dy 
end	
 
	x = x+dx
	y = y+dy 
 
 
 
	image.blit(ball,x,y)
	screen.flip()
end

agregue estas lineas para cargar la imagen de fondo y la paleta pero como ya dije antes queda la pantalla negra y se apaga luego de 1 minuto
--coordenadas y velocidad de la bola --
y = 100
x = 100
dx = 2 
dy = 2
-- coordenadas y velocidad de paleta-- 
py = 10
vy = 2  
px = 10 
vx = 2 
-- imagenes.cargar.-- 
ball = image.load("ball.png")
palt = image.load("palt.png")
fond = image.load("fond.png")
while true do
	controls.read()
 
 
 
 
 
 
if controls.r() then
		y = 100
		x = 100
		image.blit(ball,x,y)
 
		screen.flip()
end
	if ((x >= 445) or (x <= 0)) then
		dx = -dx 
end
		if ((y >= 237) or (y <= 0)) then
		dy = -dy 
end	
 
	x = x+dx
	y = y+dy 
 
 
	image.blit(Palt,px,py)
	image.blit(ball,x,y)
	screen.flip()
end
Gracias de Antemano Lengua fuera

Imagen de gdljjrod

Checa

Checa como se hacen las comprobaciones de los botones y al blitear ok

--coordenadas y velocidad de la bola --
y = 100
x = 100
dx = 2
dy = 2
-- coordenadas y velocidad de paleta-- 
px = 10
py = 10
vx = 2
vy = 2
-- imagenes.cargar.-- 
ball = image.load("ball.png")
palt = image.load("palt.png")
fond = image.load("fond.png")
while true do
fond:blit(0,0)				--Mostrar fondo
controls.read()				--Lectura controles
 
if controls.press("r") then x,y = 100,100 end
--[[Reiniciar valores de la pelota cuando presiones R (no es necesario volver a blitear la pelota ya que abajo ya las estas bliteando, basta con resetear las coordenadas.]]
 
if ((x >= 445) or (x <= 0)) then dx = -dx end
if ((y >= 237) or (y <= 0)) then dy = -dy end	
 
x = x+dx
y = y+dy 
 
palt:blit(px,py)--usa asi tus blits
ball:blit(x,y)
 
screen.flip()
end


 

Imagen de Andres_Ne

Muñequitos

donde puedo buscar mis propios muñequitos y hay alguna condicion para las imagenes?

Imagen de m.rr

Tienes que adaptar el code

Tienes que adaptar el code dependiendo del sprite, para eso necesitas entender el code

Imagen de TALENT CRAZY

Fallo

hola, mi problema es que cuando lo ejecuto en el psp.(la primera vez que lo ejecuto es cuando Chime dice: listo ejecutalo). Ok lo que pasa es que se arranca, aparece el muñeco en la esquina superior drecha mirandeme a mi xD. hasta hay todo bien, cuando pulso un boton direccional, la psp se me congela y se apaga automaticamente. Aqui dejo mi codigo:

link = {}

link["stay"] = {}

link["walk"] = {}

 

link.stay.up = image.load("sprites/link_stay_up.png")

link.stay.down = image.load("sprites/link_stay_down.png")

link.stay.right = image.load("sprites/link_stay_right.png")

link.stay.left = image.load("sprites/link_stay_left.png")

 

rawset (link["walk"],"up",image.loadsprite("sprites/link_stay_up.png",22,27))

rawset (link["walk"],"down",image.loadsprite("sprites/link_stay_down.png",22,27))

rawset (link["walk"],"right",image.loadsprite("sprites/link_stay_right.png",22,27))

rawset (link["walk"],"left",image.loadsprite("sprites/link_stay_left.png",22,27))

 

status= "stay"

direction= "down"

x = 10

y = 10

anim = 0

 

while true do

controls.read ()

if controls.up () or controls.down () or controls.right () or controls.left () then

anim = anim + 1

status = "walk"

else 

anim = 0

status = "stay"

end

if controls.up () then

y = y - 1

direction = "up"

elseif controls.down () then

y = y + 1

direction = "down"

elseif controls.right () then

x = x + 1

direction = "right"

elseif controls.left () then

x = x - 1

direction = "left"

end

if status=="walk" then

link[status][direction]:setframe(anim)

end

link[status][direction]:blit(x,y)

screen.flip ()

if controls.l () and controls.cross () then

broke ()

end

end


Los comienzos son difíciles, pero cuando tu cuerpo supera su límite, la mente pide más. Recomiendo que se pasen todos por mi canal de youtube, en el cual pasarán un buen rato. Advierto que soy novato, asique por más razón pasense y dejen comentarios para que mejore. Mi canal se llama MrTalentCrazy

MMMM

Ehh esto mucha computación para mí C/++? C++ es mucha programación para mi, creo que será mejor quedarme como estoy :) No es para que se ofendan


 

 

ehm....

Esto no es C++, es Lua -_-

Mira los comentarios mas

Mira los comentarios mas abajo ahi dise C++ por eso hise comentario

Al igual que este post (del LUA)

Imagen de ANI-KIBA

Es LuaDEV...

no es ni C, C++, Lua.

Bueno

Bueno

Me sale un error

Cuando ejecuto el Luadev en el PSP me sale este error: "script.lua:31: = expected near <eof>"

ya revise esa linea como 10 veces tratando de cambiarla pero nada de nada, me podrian ayudar gracias.

 

PD: Segui el tutorial al pie de la letra, ¿o es que hise algo mal?

 

EDIT: No se que paso pero ya lo arregle xD, gracias igualmente.

Imagen de anxoganso

Lo que te paso es k te

Lo que te paso es k te faltaba un end

Imagen de NauTiluS1

Como hago para cuándo el

Como hago para cuándo el sprite llegue a tal frame pase algo?

Imagen de barney77

Frame es lo mismo que cuadro

Frame es lo mismo que cuadro de animacion?

Si fuera asi entonces(siguiendo el tuto):

if math.floor(anim)>X then () end

Imagen de DmaKill_18

aclarado y aprendido

Hermano muchisimas gracias por este tuto ya que con el aprendi cosas que no sabia y aclarar muchas dudas

luaDev

Novato.

He seguido la linea de tutuoriales(muy buenos), tengo algunas preguntas:

¿ Como se hace el eboot.pbp de luaDev?¿es una implementacion o modificacion de lua para nuestra psp?¿Como se hace?.

¿ Que version de lua es?.

Estoy leyendo mucho y tengo un caos en la cabeza impresionante, no se que lua uso o cual es el mas actual para la psp.

¿En la pagina de lua esta 5.2? ¿la documentacion de este serve para algo, para la psp?

Tengo mas pegruntas pero creo que estas son las que me contentaran muchas de ellas.

Muchas gracias, un saludos a todos.

 

 

Imagen de NauTiluS1

SOLUCIONADO

SOLUCIONADO

Imagen de NauTiluS1

Vaya, antes lo veía tan dificil xD

Ahora que me paso a verlo lo entiendo muy bien :D

Tengo esta duda en esta parte del code =_=

rawset(link["walk"],"up",image.loadsprite("sprites/link_walk_up.png",22,27))
rawset(link["walk"],"down",image.loadsprite("sprites/link_walk_down.png",22,27))
rawset(link["walk"],"right",image.loadsprite("sprites/link_walk_right.png",22,27))
rawset(link["walk"],"left",image.loadsprite("sprites/link_walk_left.png",22,27))

Emmm por qué tengo que cargar las imagenes dos veces?


Follow me twitter nautilus1_jmccu!!
Sony, ya a nadie le interesa tus UMD si alguien compra una psp es por nosotros los coders. Madura y has un FW que haga la diferencia y anime a las personas en comprar un PSP

Imagen de Chimecho

¿?

No veo donde se cargan dos veces... lee bien...

Imagen de NauTiluS1

Pues aquí link.stay.up =

Pues aquí

link.stay.up = image.load("sprites/link_stay_up.png")
link["stay"].down = image.load("sprites/link_stay_down.png")
link.stay["right"] = image.load("sprites/link_stay_right.png")
link["stay"]["left"] = image.load("sprites/link_stay_left.png")
 
 
 
 
 
rawset(link["walk"],"up",image.loadsprite("sprites/link_walk_up.png",22,27))
rawset(link["walk"],"down",image.loadsprite("sprites/link_walk_down.png",22,27))
rawset(link["walk"],"right",image.loadsprite("sprites/link_walk_right.png",22,27))
rawset(link["walk"],"left",image.loadsprite("sprites/link_walk_left.png",22,27))

Nose si esté viendo bien, pero bueno


Follow me twitter nautilus1_jmccu!!
Sony, ya a nadie le interesa tus UMD si alguien compra una psp es por nosotros los coders. Madura y has un FW que haga la diferencia y anime a las personas en comprar un PSP

Imagen de Chimecho

pos no

necesitas lentes... unas dicen STAY y las otras dicen WALK

Imagen de barney77

Nah

Nah son diferentes, descargate el pack y te darás cuenta que son diferentes imagenes.

Imagen de Tu_yo

Menudo gazapo

espero que ya le hayan dado una leída ¡¿leída?!, es lectura... por Dios que alguien cambie eso.

Imagen de _-Viciuz-_

es correcto

de las dos formas.

Imagen de Dioni0396

Habra

proximas entregas? O se acabo ya?

Imagen de Chimecho

no se ha acabado

Si habrán proximas entregas, pero de momento el Team GCrew (eso me incluye) estamos ocupados con lo del genesis...

Saludos!

Imagen de luisadniel

Chimecho, si entiendes LUA

Chimecho, si entiendes LUA eres un genio

Imagen de NauTiluS1

Sí lo entiende? :S Entonces

Sí lo entiende? :S

Entonces como creó esté tutorial? xD

Imagen de Samuelfrm

._.

Llamale genio, porque ah creado grandes y geniales juegos en Lua......

xD salu3.

Imagen de barney77

Bueno

Bueno, también creo Lua DEV junto a DeViAnTe.

Imagen de Samuelfrm

xD

Aparte de eso, DeViaNTe y Chime Molan xD, entonces desde ahora en adelante: Los Albert's Einstain's xD.

Salu3 Barney

Imagen de barney77

Jajaja

Jajaja, eso me gusta.

[Off - Topic]. Ese avatar de "Sin Mascara" mola, ¡Viva el Mistico y Viva México!.

Imagen de luisadniel

hey, no sabia que  eras staff

hey, no sabia que  eras staff

Imagen de jesus.100

aaaaaa

aaaaaaa noo 

manchen noo

leee enteendii

jejejee

Imagen de arielnmz

cuando harán uno completo

cuando harán uno completo pero para C/C++ ???

Imagen de klozz

mm pues yo eh hecho varios en

mm pues yo eh hecho varios en C que por alguna razon no los han visto xD pero en esta url hay uno igual para manejar sprites ;D

http://psp.scenebeta.com/node/71249


TEAM MEX Homebrew y desarrollo PSP

Metal TrooperV.Pre-Alpha (15%)Lua , 10% C .

Ubunshell VProof. (45%)C

RPG Magues (35%)Lua , 5% C


Android development for Xperia X8 ^^ mis roms en XDA-Developers ya que en Scenebeta no las publican xD

Xperience  | MIUI Pikachu | Semc debrand engine | Froyexp | Xperience walkman mod | Android 4.0.4 CN9 Crema de nieve

-- KLOZZ

Imagen de Guillermo_Cornielle

Buen tuto

Esta muy bueno. Aunque yo te recomendaria que programaras en SDL para PSP, asi es mas fácil portar tus juegos a otras plataformas, y mucho mas sencillo de aprender.

SDL es muy buena y potente, y creme que no miento, incluso aprendiendo SDL paar PC puedes programar para PSP pues su sintaxis es practicamente la misma, al igual que las funciones.

Saludos.


Manual del Perfecto Votante Para un voto libre y justo!.

TheGCProjects

Imagen de sting18

has firmado un HB con SDL?

has firmado un HB con SDL  Guillermo_Cornielle?

Imagen de Guillermo_Cornielle

Noo

No me he metido con C para PSP, para PC si y he probado SDL, no mucho, en PSP aprendi LUA.

No he firmado nada, solo digo que SDL es mas practica para programar juegos, es multiplataforma, y es lo mejor xDD, enserio, pruebenla, veran que no es para naad dificil.

Saludos.


Manual del Perfecto Votante Para un voto libre y justo!.

TheGCProjects

Imagen de klozz

XD mmm con oslib yo si xD

XD mmm con oslib yo si xD pero no funca XD inicia y se queda la pantalla en negro ;D

Imagen de sting18

si lo se lo he intentado de

si lo se lo he intentado de hecho el DiferenciaSP esta firmado y para poder hacerlo tube que usar librerias especiales para psp.

Imagen de Tsukiumi

Yo podría

Yo podría hacerlos, pero deja primero me doy una pequeña noción por entenderle a C.

Imagen de klozz

=P ojala puedas hacer el paso

=P ojala puedas hacer el paso a la zona de tutos :)

Se va escuchar un poco

Se va escuchar un poco grosero... pero se hará cuando alguien quiera y pueda hacerlo. Chimecho nos ha estado compartiendo estos tutoriales por gusto, no es que nosotros se lo hayamos pedido ;)

Imagen de arielnmz

esta bien solo era un

esta bien solo era un comentario, que se me hace raro que haya muchas cosas para Lua y casi nada para C... los plugins se pueden hacer en lua??

Imagen de Guillermo_Cornielle

No

Para poder crear un Plug-in necesitas aprender C/C++, C++ es solo una extension de C, por asi decirlo, lo cual lo diferencia el primero del segundo que C++ es orientado a objetos.

Puedes aprender a programar en LUA si lo que te interesa es juegos y esas cosas, ya que LUA es mas facil de manejar al ser interpretado, pero eso no quita que puedas lograr grande cosas con el, juegos como LUA 1945, de pipagerardo, esta escritos en LUA , publicados en esta web, y son muy bueno.

Cañones Corazas, creo que asi se llama, hay muchos mas una de un pollito que ahora mismo no recuerdo el nombre, pero son unos pocos de los cientos de juegos buenos escritos en LUA.

Si bien, si quieres algo mas complejo, tendras que aprender C y bueno, practicar bastante, ps no hay muchos tutos buenos de C para PSP corriendo en la web, yo te recomendaria que aprendieras C para PC y luegos cuando ya estes bien nutrido en este lenguaje, te leas la documentacion de C para PSP y empeices a echarle ganas.

Saludos.


Manual del Perfecto Votante Para un voto libre y justo!.

TheGCProjects

Imagen de Tsukiumi

No

Si no me equivoco, creo que se necesita mínimo C.

Imagen de ANI-KIBA

Gracias!! n.n

Ahora animare a mi tortuga!! :D

xD Saludos!

Imagen de Psprekiem

Gracias Chime , me leo el

Gracias Chime , me leo el anterior i me pongo con este ^^ xD

Saludos ;)

Imagen de klozz

=O gracias chime eso de los

=O gracias chime eso de los limites me servira mucho :D saludos

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.