Tengo una duda y es que no se como se cargan sprites, he estado mirando pero solo te dicen como dibujarlos en la pantalla, pero yo lo que quiero es cargarlos como si cada uno fuera una imagen, no se si me explico bien.
Aunque ya llegué a entender como cargar sprites en una sola plantilla, ese tutorial irá muy bien, pues la gente que empieza a programar y necesita usar sprites en una plantilla, al principio es bastante dificil de comprender como hacerlo sin dividir las imágenes.
Me ayudo mucho,pero no es lo que busco, yo quiero cargar los sprites de una sola imagen. Me preguntaba si habria una opcion por ejemplo de cargar una parte de la imagen, ya que solo he encontrado como "dibujar" una parte de la imagen, y con ello no creo que me sirva. No se si me habré explicado bien.
Cargas toda la imagen, una sola vez, y luego muestras sólo la parte que te interesa. Tan simple como eso. (Así funcionan las hojas de sprites). Esto tiene la ventaja que sólo necesitas cargar una vez la imagen.
Es que, para cargar varias veces una imagen a trozos, ya haces varias imágenes distintas...
Strength is irrelevant. Resistance is future. We wish to improve ourselves.
La fuerza es irrelevante. La resistencia es futuro. Queremos mejorarnos.
lo que no se como hacer, es que en los sprites como en el tutorial, se le asigna una "palabra" a cada sprite: s1f,s2f,s3f etc.
pero como se puede coger una parte de la imagen para asignarla a una variable?? es que yo solo se coger partes de una imagen para dibujarlas (screen:blit(10, 20, prueba, 15, 15, 30, 30)) Pero para asignare a una variable una parte como se haria? s1f = imagen(15,15,30,30)??? es que es esta la pregunta.
Esa es la pregunta del millón... ¿para qué necesitas asignar una variable a cada parte del sprite?
Lo único que necesitas es mostrar una parte de la imagen... en todo caso, lo suyo sería guardar las coordenadas a mostrar...
Pero vaya, en todo caso, tú mismo (casi) das la respuesta: creas una variable con una imagen en blanco, y luego le haces un nombreImagen:blit(10, 20, prueba, 15, 15, 30, 30)... y hala, ya está cargada esa parte de la imagen maestra/hoja de sprites en la variable/imagen menor.
Strength is irrelevant. Resistance is future. We wish to improve ourselves.
La fuerza es irrelevante. La resistencia es futuro. Queremos mejorarnos.
Todos hemos tenido el "momento palmetazo en la frente" varias veces :D :D
En cualquier caso, siempre es bueno intentar evitar trabajar directamente con imágenes... Quieras que no, para esto, por ejemplo, no necesitas más que un juego de 4 enteros, un par de bytes como mucho, para cualquier tamaño de imagen...
...mientras que si la asignas como variable independiente y haces una copia, para una miserable imagen de 20x20 y sin transparencia, ya necesitas (Lua, en realidad) una tabla de 400 registros de 24 bits cada uno, 32 si hay transparencia... Incluso si vas a trabajar directamente sobre la imagen, sale más a cuenta emplear "datos virtuales" (almacenar los cambios en una tabla aparte) y aplicarlos después, que hacer una copia y trabajar sobre ella. Se nota la diferencia, sobre todo en Lua, que tampoco es tan bueno como eso trabajando con imágenes...
A disponer :)
Strength is irrelevant. Resistance is future. We wish to improve ourselves.
La fuerza es irrelevante. La resistencia es futuro. Queremos mejorarnos.
No se si lo he entendido mal pero no me sale, he provado de muchas formas.
he puesto por ejemplo en la funcion de movimiento
function sprd()
if pasosd >= 0 and pasosd < 10 and pad:right() then
screen:blit(S[1].x,S[1].y,imagensprite,7,99,26,142)
end
if pasosd >= 10 and pasosd < 20 and pad:right() then
screen:blit(S[1].x,S[1].y,imagensprite,39,100,58,142)
end
if pasosd >= 20 and pasosd < 30 and pad:right() then
screen:blit(S[1].x,S[1].y,imagensprite,71,99,90,142)
end
if pasosd >= 30 and pasosd < 40 and pad:right() then
screen:blit(S[1].x,S[1].y,imagensprite,102,100,122,142)
end
if pasosd >= 40 then
pasosd=0
end
end
eso para cada direccion, pero me da muchos problemas.
Cualquier ayuda se agradece mucho ya que no he acabado de entender esto cuando pensaba que si.
Y vaya pedazo de sprite si mide 142 píxeles de alto...
Los argumentos (por lo menos en el Player que uso... y creo que esto no varía mucho) son:
image:blit(x, y, origen, [xOrigen, yOrigen, ancho, alto], [alpha = verdadero])
...para seleccionar sólo un trozo de dimensiones "ancho"X"alto", a partir de la posición "xOrigen/yOrigen" de la imagen "origen"...
Entonces, poniéndolo en ejemplo para que quede más claro... el sprite siempre será de más o menos el mismo tamaño, ¿no?, pongamos, por decir algo, que siempre es de 32 de ancho por 48 de alto (para distinguir las coordenadas). Y supondemos, para simplificar un pelín, que los sprites están perfectamente puestos en "cajas" dentro de la imagen...
Para la primera caja (empieza en 0,0 de la imagen original), sería:
Y así sucesivamente... fíjate que en tu código estás cambiando todo el rato el ancho del sprite.
Por otra parte, te diría que anidaras los ifs y que usaras algún else... Fíjate que si "pasosd" está entre 30 y 40, le obligas a hacer 4 comprobaciones para el resultado, mientras que si es de sólo 0-10 basta la primera, y el resto sobra... y todos necesitan el pad:right(), así que puedes ahorrarte tiempo con cosas como:
if pad:right() then
if pasosd<20 then
if pasosd>=10 then
-- pasosd está entre 10 y 19,99999999999...
else
-- pasosd está entre 0 y 9,999999999999...
end
else
-- repetir la estructura anterior...
end
end
...supongo que ya entenderás la estructura... lo que consigues con esto es un código de ejecución más estable, y probablemente incluso más rápido... y en cualquier caso, más comprensible, ya que con esta estructura de árbol puedes localizar más exactamente cada etapa del código, y se ejecuta sólo lo que hay que ejecutar.
Strength is irrelevant. Resistance is future. We wish to improve ourselves.
La fuerza es irrelevante. La resistencia es futuro. Queremos mejorarnos.
Tengo un juego muy avanzado pero tengo algun problema. Por ejemplo, tengo un menu que me funciona correctamente, pero cuando haces una accion (mirar las instrucciones, te matan en el juego o algo) y quieres volver al menu (tengo if pad:start then dofile ("menu.lua") se bloquea el juego.
Bueno, te dire que no se exactamente bien como hacerlo, puedes cargar la imagenes de la manera que te dijo el usuario de arriba osea:
miImagen= Imagen.load("sprites.png")
puedes cargar la imagen normalmente, pero para hacer que se haga el movimiento de sprites, creo que a la hora de que lo vallas a dibujar en pantalla tienes que darle los pixeles de comienzo y los pixeles del final para eso, claro, antes debes hacer todas las funciones de su movimiento.
No se explicarlo muy bien, peroi en el tuto de los sprites, en el link que te dio superspiru, hay un usuario que dio un ejemplo de como hacerlo de esa forma que quieres, pasate por alli y buscalo, el usuario se llama carlos o algo asi.
Si quieres
usar los sprites sólo en la plantilla, esperate unos días que estoy haciendo un tutorial con eso mismo.
Saludos ;)
Ok.
Aunque ya llegué a entender como cargar sprites en una sola plantilla, ese tutorial irá muy bien, pues la gente que empieza a programar y necesita usar sprites en una plantilla, al principio es bastante dificil de comprender como hacerlo sin dividir las imágenes.
Esperare tu tutorial ;).
Saludos
Como..
dice Superspiru mira ese tutorial, de todas maneras siempre has de empezar cargando las imagenes...
s1 = Image.load("imagenes/sprite1.png")
s2 = Image.load("imagenes/sprite2.png")
s3 = Image.load("imagenes/sprite3.png")
Esto es un ejemplo, puedes cargar tantas como quieras...
Después abajo escribes el código para darle movimiento, y para finalizar cierras el bucle principal.
Todo eso miralo en los tutos de aquí scenebeta, sino también puedes buscar en páginas externas a esta web por la madre Google.
Saludos! ;)
Dicen que soy programador... Eso dicen.
pasate por AQUI lo mismo te
pasate por AQUI lo mismo te ayuda en algo
Ese tutorial
Me ayudo mucho,pero no es lo que busco, yo quiero cargar los sprites de una sola imagen. Me preguntaba si habria una opcion por ejemplo de cargar una parte de la imagen, ya que solo he encontrado como "dibujar" una parte de la imagen, y con ello no creo que me sirva. No se si me habré explicado bien.
Saludos y Gracias.
Es simple
Cargas toda la imagen, una sola vez, y luego muestras sólo la parte que te interesa. Tan simple como eso. (Así funcionan las hojas de sprites). Esto tiene la ventaja que sólo necesitas cargar una vez la imagen.
Es que, para cargar varias veces una imagen a trozos, ya haces varias imágenes distintas...
Strength is irrelevant. Resistance is future. We wish to improve ourselves.
La fuerza es irrelevante. La resistencia es futuro. Queremos mejorarnos.
Pero
lo que no se como hacer, es que en los sprites como en el tutorial, se le asigna una "palabra" a cada sprite: s1f,s2f,s3f etc.
pero como se puede coger una parte de la imagen para asignarla a una variable?? es que yo solo se coger partes de una imagen para dibujarlas (screen:blit(10, 20, prueba, 15, 15, 30, 30)) Pero para asignare a una variable una parte como se haria? s1f = imagen(15,15,30,30)??? es que es esta la pregunta.
Saludos y Gracias una vez mas.
Y ¿para qué lo necesitas?
Esa es la pregunta del millón... ¿para qué necesitas asignar una variable a cada parte del sprite?
Lo único que necesitas es mostrar una parte de la imagen... en todo caso, lo suyo sería guardar las coordenadas a mostrar...
Pero vaya, en todo caso, tú mismo (casi) das la respuesta: creas una variable con una imagen en blanco, y luego le haces un nombreImagen:blit(10, 20, prueba, 15, 15, 30, 30)... y hala, ya está cargada esa parte de la imagen maestra/hoja de sprites en la variable/imagen menor.
Strength is irrelevant. Resistance is future. We wish to improve ourselves.
La fuerza es irrelevante. La resistencia es futuro. Queremos mejorarnos.
¡Dios Mio! que cegado he
¡Dios Mio! que cegado he estado!!xD
Ahora me doy cuenta, he tenido la respuesta delante mio y como queria hacer otra cosa, no lo he visto.
Gracias y Un Saludo.
Suele pasar :D
Todos hemos tenido el "momento palmetazo en la frente" varias veces :D :D
En cualquier caso, siempre es bueno intentar evitar trabajar directamente con imágenes... Quieras que no, para esto, por ejemplo, no necesitas más que un juego de 4 enteros, un par de bytes como mucho, para cualquier tamaño de imagen...
...mientras que si la asignas como variable independiente y haces una copia, para una miserable imagen de 20x20 y sin transparencia, ya necesitas (Lua, en realidad) una tabla de 400 registros de 24 bits cada uno, 32 si hay transparencia... Incluso si vas a trabajar directamente sobre la imagen, sale más a cuenta emplear "datos virtuales" (almacenar los cambios en una tabla aparte) y aplicarlos después, que hacer una copia y trabajar sobre ella. Se nota la diferencia, sobre todo en Lua, que tampoco es tan bueno como eso trabajando con imágenes...
A disponer :)
Strength is irrelevant. Resistance is future. We wish to improve ourselves.
La fuerza es irrelevante. La resistencia es futuro. Queremos mejorarnos.
Nada..
No se si lo he entendido mal pero no me sale, he provado de muchas formas.
he puesto por ejemplo en la funcion de movimiento
function sprd()
if pasosd >= 0 and pasosd < 10 and pad:right() then
screen:blit(S[1].x,S[1].y,imagensprite,7,99,26,142)
end
if pasosd >= 10 and pasosd < 20 and pad:right() then
screen:blit(S[1].x,S[1].y,imagensprite,39,100,58,142)
end
if pasosd >= 20 and pasosd < 30 and pad:right() then
screen:blit(S[1].x,S[1].y,imagensprite,71,99,90,142)
end
if pasosd >= 30 and pasosd < 40 and pad:right() then
screen:blit(S[1].x,S[1].y,imagensprite,102,100,122,142)
end
if pasosd >= 40 then
pasosd=0
end
end
eso para cada direccion, pero me da muchos problemas.
Cualquier ayuda se agradece mucho ya que no he acabado de entender esto cuando pensaba que si.
Saludos.
Estás cambiando el ancho todo el rato...
Y vaya pedazo de sprite si mide 142 píxeles de alto...
Los argumentos (por lo menos en el Player que uso... y creo que esto no varía mucho) son:
image:blit(x, y, origen, [xOrigen, yOrigen, ancho, alto], [alpha = verdadero])
...para seleccionar sólo un trozo de dimensiones "ancho"X"alto", a partir de la posición "xOrigen/yOrigen" de la imagen "origen"...
Entonces, poniéndolo en ejemplo para que quede más claro... el sprite siempre será de más o menos el mismo tamaño, ¿no?, pongamos, por decir algo, que siempre es de 32 de ancho por 48 de alto (para distinguir las coordenadas). Y supondemos, para simplificar un pelín, que los sprites están perfectamente puestos en "cajas" dentro de la imagen...
Para la primera caja (empieza en 0,0 de la imagen original), sería:
screen:blit(S[1].x, S[1].y, imagensprite, 0,0, 32, 48)
La segunda caja (primera fila, segunda columna):
screen:blit(S[1].x, S[1].y, imagensprite, 32,0, 32, 48)
La segunda fila, primera columna:
screen:blit(S[1].x, S[1].y, imagensprite, 0,48, 32, 48)
Y así sucesivamente... fíjate que en tu código estás cambiando todo el rato el ancho del sprite.
Por otra parte, te diría que anidaras los ifs y que usaras algún else... Fíjate que si "pasosd" está entre 30 y 40, le obligas a hacer 4 comprobaciones para el resultado, mientras que si es de sólo 0-10 basta la primera, y el resto sobra... y todos necesitan el pad:right(), así que puedes ahorrarte tiempo con cosas como:
if pad:right() then
if pasosd<20 then
if pasosd>=10 then
-- pasosd está entre 10 y 19,99999999999...
else
-- pasosd está entre 0 y 9,999999999999...
end
else
-- repetir la estructura anterior...
end
end
...supongo que ya entenderás la estructura... lo que consigues con esto es un código de ejecución más estable, y probablemente incluso más rápido... y en cualquier caso, más comprensible, ya que con esta estructura de árbol puedes localizar más exactamente cada etapa del código, y se ejecuta sólo lo que hay que ejecutar.
Strength is irrelevant. Resistance is future. We wish to improve ourselves.
La fuerza es irrelevante. La resistencia es futuro. Queremos mejorarnos.
Una cosa que no tiene nada que ver...
Tengo un juego muy avanzado pero tengo algun problema. Por ejemplo, tengo un menu que me funciona correctamente, pero cuando haces una accion (mirar las instrucciones, te matan en el juego o algo) y quieres volver al menu (tengo if pad:start then dofile ("menu.lua") se bloquea el juego.
Alguna sugerencia?? :S
Saludos y Gracias
te entiendo
Bueno, te dire que no se exactamente bien como hacerlo, puedes cargar la imagenes de la manera que te dijo el usuario de arriba osea:
miImagen= Imagen.load("sprites.png")
puedes cargar la imagen normalmente, pero para hacer que se haga el movimiento de sprites, creo que a la hora de que lo vallas a dibujar en pantalla tienes que darle los pixeles de comienzo y los pixeles del final para eso, claro, antes debes hacer todas las funciones de su movimiento.
No se explicarlo muy bien, peroi en el tuto de los sprites, en el link que te dio superspiru, hay un usuario que dio un ejemplo de como hacerlo de esa forma que quieres, pasate por alli y buscalo, el usuario se llama carlos o algo asi.
Suerte.
Manual del Perfecto Votante Para un voto libre y justo!.
TheGCProjects