Rotar sprite en LUA

Hola peña!!

Alguien sabe como se rota un sprite en LUA?
No encuentro el comando ein?

Gracias!!
Yo no he trabajado con lua, pero segun esta pagina:

http://sashipa.ben.free.fr/dcplaya/Documentation/html/group__dcplaya__lua__sprite.html


La funcion sprite tiene un parametro de rotacion:

sprite (var name, var x, var y, var w, var h, var u1, var v1, var u2, var v2, var texture, var rotate)
Create a sprite and add it in the list of named sprite.

Parameters:
name sprite name.
x X coordinate of sprite origine (default 0).
y Y coordinate of sprite origine (default 0).
w Sprite width (optionnal guessed from texture)
h Sprite height (optionnal guessed from texture)
u1 texture left coodinate (optionnal guessed from texture)
v1 texture top coodinate (optionnal guessed from texture)
u2 texture right coodinate (optionnal guessed from texture)
v2 texture bottom coodinate (optionnal guessed from texture)
texture texture-id, texture-name, or texture-file
rotate non nil to perform a -90 degree rotation.
Gracias por responder [beer]

Aunque parece que es una libreria propia. La descripcion de la funcion en si misma no viene en la pagina.

Tendré que seguir buscando.

[decaio]
flikifliki escribió:Gracias por responder [beer]

Aunque parece que es una libreria propia. La descripcion de la funcion en si misma no viene en la pagina.

Tendré que seguir buscando.

[decaio]


Bueno, en ese caso, tienes dos opciones: cargar el sprite girado, o crear tu mismo un sprite girado en tiempo real.

Si lo que quieres son giros en pasos de 90 grados, es muy sencillo de hacer, pues basta con copiar el sprite original en una nueva area de memoria de forma que la imagen quede girada en el sprite de destino.

Por ejemplo, si queremos girar 90 grados a la derecha un sprite, tendriamos que leer cada pixel del sprite, recorriendolo de izquierda a derecha (scans) y luego incrementando una linea hacia abajo y copiandolos en el nuevo destino, de arriba a abajo en la posicion mas a la derecha y decrementando hacia la izquierda una unidad, por cada scan.

El truco está en utilizar un sprite de origen y otro de destino que sean cuadrados, porque de otra forma, sobreescribirias el original o no casaran las imagenes, claro.

Si lo que quieres es girar en pasos mas finos, esto es mas problematico porque para empezar, en los sprites cuadrados es facil que ocurra que un sprite girado no quepa y se salga de limites, por lo que deberias crear un sprite mucho mas grande y centrar el de origen y luego proceder a crear el sprite girado (no te puedo explicar como hacer esto, pero tecnicamente, seria lo mismo que girar los vertices de un QUAD y luego rasterizarlo en pantalla al estilo de una grafica 3D) y luego como ultimo paso, proceder a una comprobacion de limites del grafico y transferirlo a un contenedor mas optimizado.

Como ves, no es moco de pavo y personalmente, te recomiendo utilizar mejor un programa de dibujo (estoy pensando muy seriamente en implementar esto en mi utilidad sprite_gen ;) )
Gracias!!

Madre mia, la que hay que liar para girar un spritecito de nada en LUA, para que luego digan que es sencillo de programar...

:-P

Creo que prefiero crear la imagen girada en X grados y simular el giro en el programa, parece mas sencillo que trabajar directamente con las imagenes en memoria.

Un saludo!!
Aqui tienes unos cuantos scripts de LUA que te pueden ser utiles.
Entre ellos está el que tu buscas para rotar sprites:

http://beta.pesepe.com/forum-topic/busco-scripts-de-lua

Saludos
flikifliki escribió:Gracias!!

Madre mia, la que hay que liar para girar un spritecito de nada en LUA, para que luego digan que es sencillo de programar...

:-P

Creo que prefiero crear la imagen girada en X grados y simular el giro en el programa, parece mas sencillo que trabajar directamente con las imagenes en memoria.

Un saludo!!


En cuanto te sales de rotaciones simples, es mucho mejor hacerlas en el programa de dibujo entre otras cosas, porque al girar un sprite implica que tendras que colorear algunos pixeles, decidiendo entre un color u otro o creando colores intermedios (esto es asi porque los pixeles estan encima,abajo o a los lados, unos de otros por lo que rotaciones con base en 90 grados no hay problema, pero al girar con otros angulos, habrá pixeles que deberian representar dos colores (con lo cual o uno u otro o un color intermedio).

Asi que lo mas probable, es que el grafico girado no se vea bien y deba ser retocado en el programa de dibujo, por lo que no merece la pena hacerlo en tiempo real (salvo cosas muy concretas)
6 respuestas