Foros - Stratos

Proyectos => Proyecto dx_lib32 => Mensaje iniciado por: Hechelion en 16 de Febrero de 2009, 08:26:13 AM

Título: Animación, clase y GUI para crearla
Publicado por: Hechelion en 16 de Febrero de 2009, 08:26:13 AM
Clase para control de animaciones a partir de archivo AAD (archivo de animación DXlib32)

EVENTOS
StopAnim -> se activa al momento de terminar una secuencia de animación que no sea infinita

Propiedades
AnimName -> recupera el nombre de la animación en curso

AnimIndex -> recupera el indice de la animación en curso

Mirror As Blit_Mirror -> determina si la animación se dibujara con algún tipo de espejo.

LastAnimName -> recupera el nombre de la última animación ejecutada antes de la actual

LastAnimIndex -> recupera el indice de la última animación ejecutada antes de la actual

AnimForFault -> determina cual animación se utilizara por defecto. (está animación se dispara por defecto al terminar cualquier otra animación).

Pause -> Pausa/ Recuepra la ejecución del ciclo de avance de animación. (Se puede usar para evitar que la animación avance pero sin dejar de dibujar)

Procedimientos
Init(nGFX As dx_GFX_Class, nSystem As dx_System_Class, Optional RutaAAD As String)
-> se utiliza para iniciar el objeto entregnado las referencias a las clases de la libreria DxLib32
RutaAAD-> opcional entregar la cadena o la ruta al arhcivo AAD que contiene la información de la animación

Terminate-> se utiliza para terminar el objeto y descargar todos los elementos gráficos cargados en memoria

Draw(PosX As Long, PosY As Long, Z As Long, Optional Angulo As Single,  Optional Transparencia As Long, Optional Zoom As Long)
-> se utiliza para dibujar el objeto
PosX -> coordenada del eje X donde desea dibujar la animación
PosY -> coordenada del eje Y donde desea dibujar la animación
Z -> igual que el Z de Map_Draw
Angulo -> Permite rotar la animación, igual que Map_Draw.
Transparencia -> valor de 0 a 100 que determina si la imagen debe llevar transparencia
Zoom -> permite aumentar el tamaño de la imagen. (no probado)

LoadADD(ruta As String, SinImagen as Boolean)
-> se utiliza para cargar la cadena AAD o la ruta al archivo AAD que contiene la información de la animación. cuando se carga una cadena AAD la clase se encarga de cargar los recursos gráficos necesarios
Si SinImagen es verdadero, la clase omite la carga de los archivos gráficos, siendo necesario agregarlos a mano

Play(NameAnim As String, Optional Repeat As Boolean)
-> se utiliza para indicar que se ejecute una animación
NameAnim -> indica el nombre o el indice de la animación a reproducir
Repeat -> determina si la animación se repite de forma infinita o no

GetAnimName(Index As Integer) as String
-> obtiene el nombre de una animación a partir de su valor indice

GetAnimIndex(Name As String) As Integer
-> obtiene el indice de una animación a partir de su nombre

GetRect(Index As Integer) As GFX_Rect
-> retorna la información del los rectangulos para colisiones.

Clone() As ClsAnim
-> se utiliza para clonar el objeto sin recargar los recursos gráficos

Z0 a Z5 -> NO UTILIZAR, son funciones reservadas para la clonación

NOTAS
utilice la función clone para crear copias individuales de las referencias a la clase sin recargar los recursos gráficos. Los objetos creados mediante CLONE no deben ser terminados, ya que la función terminate de la clase descarga los recursos gráficos.

Los Datos AAD se pueden pasar como un unico STRING o como una ruta a un fichero AAD, la ventaja de que se puede pasar el contenido del fichero AAD como un String es que permite cargar el archivo a una variable String, procesarlo y luego entregarlo a la clase.

Descargar:

Descarga Editor Animación Binario (http://www.deitec.cl/descargas/dxlib32/Editor_Anim_Bin.rar)

Descarga Editor Animación Código Fuente (sólo VB6) (http://www.deitec.cl/descargas/dxlib32/Editor_Anim_Source.rar)

Descarga Clase con ejemplo vb6 (http://www.deitec.cl/descargas/dxlib32/ClsAnim_VB6.rar)

Descarga Clase con ejemplo vb .NET (http://www.deitec.cl/descargas/dxlib32/ClsAnim_VBNet.rar)
Título: Re: Animación, clase y GUI para crearla
Publicado por: Hechelion en 16 de Febrero de 2009, 08:26:59 AM
Una pequeña GUI para crear archivo AAD que son los que utiliza la clase:
El programa es bastante fácil de utilizar y la mejor manera de mostrar su potencial es con un ejemplo, para lo cual vamos a crear una animación de un ovni (un fichero PNG de 512*512 pixel)

(http://i40.tinypic.com/35074ua.png)

Cagar la imagen
lo primero es abrir la aplicación y cargar el archivo (o los archivos) con las imágenes de las cuales queremos crear las animaciones. (noten que la clase y el archivo AAD soportan más de una imagen para una misma animación)

(http://i42.tinypic.com/23tl7y8.jpg)

al lado de texto de ruta hay un pequeño botón con "...", ese botón nos permite buscar la imagen PNG que deseamos agregar.

luego de agregar la imagen, le debemos dar un nombre para identificarla en nuestro proyecto, en mi caso la nombré "ovni" y además le diré que me divida la imagen en frames de 100*100 pixel (las propiedades ancho y alto). con estos parámetros el programa automáticamente calcula cuantos frames vamos a encontrar en la imagen.

Ahora presionan "Agregar" y listo, la imagen ha sido agrega como un frameset, repitiendo este proceso pueden agregar todas las imágenes que deseen, en mi caso, sólo es una.
NOTA: los nombre no pueden llevar el signo under "_" ni ser sólo la letra "s".

agregar frames personalizados
2.) si descargan la imagen, notaran que algunas  zonas con explosión son más grandes que los 100*100 pixel que fije para el resto de los frames
(http://i41.tinypic.com/2n72hsl.jpg)

este pequeño no es problema para nuestra clase, ya que si vamos al menú "Frames" (el botón frame en la parte superior"  ) verán un menú al lado izquierdo que nos permite personalizar los frames.
(http://i41.tinypic.com/28ur5sx.jpg)

básicamente la librería crea dos tipos de frames, los normales creados a partir de los valores ancho y alto que definimos al cargar la imagen y que en este menú aparecen separados por líneas rojas, cada frame recibe el nombre de la imagen más su valor de fila y su valor de columna (los número que salen en Azul).  Y los Frames personalizados.
Para crear un frame personalizado, simplemente le damos un nombre y con el mouse marcamos la zona que deseamos abarcar. Si se dan cuenta, en el ejemplo nombre a los frames especiales como e1,e2 y e3, el programa de forma automática les agrega el prefijo "S_" para reconocerlos como frames personalizados. Además podrán aprecias un cuadrado verde en la parte inferior de la última imagen, ese cuadrado verde es la zona que deseo llamar "e3".

crear animaciones
una vez hemos creado nuestros frames personalizados es hora de crear las animaciones
para ello simplemente nos pasamos a la tercera pantalla con el botón "animación" (parte superior)

el menú izquierdo tiene 3 opciones, "controles", "animaciones" y "animación"
la opción "animaciones" nos permite crear las animaciones, en este ejemplo vamos a crear 4, "vuelo" para cuando la nave este sin hacer nada, "izq" para cuando giremos a la izquierda, "der" para virar a la derecha y "explot" para cuando la nave se destruida. Una vez tenemos creadas las animaciones debemos marcar con cual deseamos trabajar y luego de eso vamos a la opción "animación" este submenú es el que nos permite enlazar los frames con la animación.
(http://i44.tinypic.com/fuxkm.jpg)

el control animación se compone de dos ascensores que nos permiten seleccionar los frames que queremos añadir a nuestra animación, debajo de estos se encuentra los offset para la imagen y el control de repetición (cuantas veces queremos que se repita este frame antes de pasar al siguiente paso de la animación), en mi caso voy a colocar 15 repeticiones ya que voy a atrabajar con 60 FPS y quiero que el ciclo de animación dure 1 segundo, así que repetire cada imagen 15 veces (4 imágenes repetidas 15 veces = 60 FPS).



Al intentar agregar la segunda imagen que compone mi animación, me he topado conque el dibujo del ovni no concuerda con la imagen anterior, así que para hacerlos calzar y que no se produzca un efecto de que la nave tiembla podemos modificar los valor de OffX y OffY, tal como muestra la siguiente imagen.
(http://i40.tinypic.com/iznew8.jpg)


Agregando Frame Personalizados
si en vez de utilizar un frame normal, quieren usar uno de los frame que crearon, tienen la lista completa de esos frames en el segundo ascensor (FRAMES EXTRAS),  se trabajan exactamente igual que los anteriores
(http://i44.tinypic.com/m9ub6t.jpg)



Colisiones

un pequeño agregado que tiene la clase, es la capacidad de agregar 2 rectángulos a cada paso de animación, esos rectángulos se pueden utilizar para crear rutinas de colisión, de esa forma se puede adaptar la colisión de un objeto a cada paso de su animación, los rectángulos se denominan Rect1 y Rect2
para agregar el REct1 (color Azul) con SHIFT izquierdo use el mouse para demarcar el área que desea asignarle al primer rectángulo.
para agregar el REct2 (color Rojo) con CTRL izquierdo use el mouse para demarcar el área que desea asignarle al primer rectángulo.

(http://i42.tinypic.com/2388c6.jpg)

Para finalizar, le damos al botón guardar y escogemos un nombre para el archivo, el programa nos creara el archivo .AAD que es el que utiliza la clase de animación

(http://i42.tinypic.com/2e6bwyc.jpg)

Espero que está pequeña reseña sea de utilidad por si desean utilizar la clase de animación.

PD: estoy terminando esto a altas horas de la madrugada, mañana en la noche, de vuelta del trabajo le daré una releída y lo ordenare por si ha quedado muy desordenado y subo los archivos.


Título: Re: Animación, clase y GUI para crearla
Publicado por: [EX3] en 16 de Febrero de 2009, 10:17:49 AM
Pedazo de curro, tio :D Tengo ganas de verlo en marcha ;)

Salu2...
Título: Re: Animación, clase y GUI para crearla
Publicado por: tewe76 en 16 de Febrero de 2009, 11:20:01 AM
Vaya currazo 8)
Título: Re: Animación, clase y GUI para crearla
Publicado por: Hechelion en 18 de Febrero de 2009, 09:58:26 AM
Para descargar la clase y el programa que permite crear archivos AAD os dejo el siguiente Link
http://www.filefactory.com/file/af258ch/n/GUI_aad_rar

el proyecto "proyecto1" es la aplicación GUI para crear archivos AAD
el proyecto "Prueba_ClaseAnim.vbp" es un pequeño programa que utiliza la clase de animación en un ejemplo donde movemos 2 ovnis por la pantalla

el proyecto permite apreciar como se utiliza la clase de animación y como es posible clonar un recurso cargado, evitando la doble carga de los recursos gráficos.

PD: de momento ambas herramientas las considero como BETA,  así que agradecería cualquier comentario o que informaran de posibles errores.

Código (vb) [Seleccionar]

Option Explicit

'Clases de la libreria dx_lib32.DLL
Dim m_gfx As dx_GFX_Class 'Referencia a la clase dx_GFX:
Dim m_Input As dx_Input_Class 'Referencia a la clase dx_Input.
Dim m_System As dx_System_Class

Dim MainLoop As Boolean

Dim WithEvents Ovni1 As ClsAnim
Dim WithEvents Ovni2 As ClsAnim
Dim Hit As GameInputHitEventClass

'Recursos
Dim Impact As Long

Dim PosX As Long
Dim PosY As Long
Dim AuxExplocion As Boolean


Private Sub Form_Load()

'Crear las instancias
Set m_gfx = New dx_GFX_Class 'Creamos la instancia de la clase dx_GFX:
Set m_Input = New dx_Input_Class 'Creamos la referencia a la clase dx_Input.
Set m_System = New dx_System_Class 'Creamos la instancia a la clase dx_system

Set Ovni1 = New ClsAnim
Set Ovni2 = New ClsAnim
Set Hit = New GameInputHitEventClass

Me.Show

'inicializar las clases
Call m_gfx.Init(Me.hWnd, 1024, 768, , True)
Call m_Input.Init(Me.hWnd) 'Inicializamos la clase dx_Input.
Call Ovni1.Init(m_gfx, m_System, App.Path & "\ovni.aad")
Call Hit.Initialize(m_Input)
Set Ovni2 = Ovni1.Clone 'clonamos el objeto ovni1 que cargo el archivo AAD


'Call m_Sound.Init(Me.hWnd) 'Inicializamos la clase dx_Sound.
Impact = m_gfx.FONT_LoadSystemFont("Lucida Console", 12, False, False, False, False)
MainLoop = True
PosX = 100
PosY = 100

Do While MainLoop
   
    If Hit.Key_Hit(Key_Escape) Then MainLoop = False  'salir del programa con scape
   
    'Control de poscisión y de animaciones
    If m_Input.key(Key_Up) And AuxExplocion = False Then
        PosY = PosY - 2
        If Ovni1.AnimName <> "vuelo" Then Call Ovni1.Play("vuelo", False)
        If Ovni2.AnimName <> "vuelo" Then Call Ovni2.Play("vuelo", False)
    End If
    If m_Input.key(Key_Down) And AuxExplocion = False Then
        PosY = PosY + 2
        If Ovni1.AnimName <> "vuelo" Then Call Ovni1.Play(0, False)
        If Ovni2.AnimName <> "vuelo" Then Call Ovni2.Play("vuelo", False)
    End If
    If m_Input.key(Key_Right) And AuxExplocion = False Then
        PosX = PosX + 2
        If Ovni1.AnimName <> "der" Then Call Ovni1.Play("der", True)
        If Ovni2.AnimName <> "izq" Then Call Ovni2.Play("izq", True)
    End If
    If m_Input.key(Key_Left) And AuxExplocion = False Then
        PosX = PosX - 2
        If Ovni1.AnimName <> "izq" Then Call Ovni1.Play("izq", True)
        If Ovni2.AnimName <> "der" Then Call Ovni2.Play("der", True)
    End If
    If Not (m_Input.key(Key_Left)) And Not (m_Input.key(Key_Right)) And AuxExplocion = False Then
        If Ovni1.AnimName <> "vuelo" Then Call Ovni1.Play("vuelo", False)
        If Ovni2.AnimName <> "vuelo" Then Call Ovni2.Play("vuelo", False)
    End If
    If Hit.Key_Hit(Key_Space) Then
        AuxExplocion = True
        Call Ovni1.Play("exp", False)
    End If
   
    Call m_gfx.DRAW_Text(Impact, CStr(m_gfx.FPS), 0, 0, 5, &HFF00FF00, Align_Left)
    Call m_gfx.DRAW_Box(0, 0, 1024, 768, 8, &HFF000000, True, &HFF000000)
   
    Call Ovni1.Draw(PosX, PosY, 0)
    Call Ovni2.Draw(1024 - PosX, 768 - PosY, 0)
   
    Call m_gfx.Frame(0, 60, True) 'limitar el programa a 60 FPS
    Hit.Update
Loop

'Liberar recursos
Call m_gfx.FONT_UnloadSystemFont(Impact)

'Finalizar clases Iniciadas de la libreria
Call Ovni1.Terminate


Call m_gfx.Terminate 'Terminamos la ejecucion de la clase:
Call m_Input.Terminate 'Terminamos la ejecucion de la clase:
'Call m_Sound.Terminate 'Terminamos la ejecucion de la clase:




'Destrucción de clases
Set Ovni1 = Nothing
Set Ovni2 = Nothing
Set Hit = Nothing
Set m_Input = Nothing 'Destruimos la instancia de la clase:
Set m_gfx = Nothing 'Destruimos la instancia de la clase:
'Set m_Sound = Nothing 'Destruimos la instancia de la clase:


Unload Me

End Sub

Private Sub Ovni1_StopAnim()

If Ovni1.LastAnimName = "exp" Then AuxExplocion = False

End Sub

Título: Re: Animación, clase y GUI para crearla
Publicado por: Vicente en 18 de Febrero de 2009, 06:09:45 PM
Como mola la verdad :)
Título: Re: Animación, clase y GUI para crearla
Publicado por: Hechelion en 19 de Febrero de 2009, 12:44:42 AM
Me alegra que les guste. Espero que estas herramientas sean de utilidad para la gente que se anima con esta librería.

Aprovecho para mencionar un pequeño error en el programa de ejemplo, las líneas:
Código (vb) [Seleccionar]

    If Not (m_Input.key(Key_Left)) And Not (m_Input.key(Key_Right)) And AuxExplocion = False Then
       Call Ovni1.Play("vuelo", False)
       Call Ovni2.Play("vuelo", False)
    End If


se deben cambiar a:
Código (vb) [Seleccionar]

    If Not (m_Input.key(Key_Left)) And Not (m_Input.key(Key_Right)) And AuxExplocion = False Then
        If Ovni1.AnimName <> "vuelo" Then Call Ovni1.Play("vuelo", False)
        If Ovni2.AnimName <> "vuelo" Then Call Ovni2.Play("vuelo", False)
    End If


el motivo es que la instrucción original, llama a la función play en cada ciclo del programa,  cuando se hace una llamada a play, está interrumpe la animación actual y comienza la ejecución desde 0 de la animación que se pasa con el procedimiento play. Si agregamos el  "If Ovni1.AnimName <> "vuelo" Then" nos aseguramos que sólo se llame a play una vez y así la animación puede correr sin problemas.

Mis disculpas por este tipo de errores, pero como comentaba, estos días se me ha notado demasiado el cansancio.
Título: Re: Animación, clase y GUI para crearla
Publicado por: [EX3] en 20 de Febrero de 2009, 10:04:50 AM
Cita de: Hechelion en 19 de Febrero de 2009, 12:44:42 AM
Mis disculpas por este tipo de errores, pero como comentaba, estos días se me ha notado demasiado el cansancio.
De disculpas nada, hombre, buen trabajo :) Ahora falta por mi parte darle bombo a estas colaboraciones en la pagina del proyecto para que esten mas a la vista de los nuevos visitantes.

Salu2...
Título: Re: Animación, clase y GUI para crearla
Publicado por: Hechelion en 28 de Febrero de 2009, 12:41:17 AM
He subido una versión actualizada que resuelve algunos Bug y de paso he cambiado el servidor, ya que al parecer el archivo fue borrado del enlace anterior.
http://www.deitec.cl/descargas/dxlib32/
Título: Re: Animación, clase y GUI para crearla
Publicado por: superbalgas en 07 de Noviembre de 2009, 12:05:57 AM
muchas gracias... estaba pensando hacer un for de varias imagenes xD!...
buen trabajo...

--

una pregunta, la cls es compatible con vb2005? gracias...
Título: Re: Animación, clase y GUI para crearla
Publicado por: Hechelion en 07 de Noviembre de 2009, 09:10:48 AM
La clase es compatible con VB6 y en estos momentos estoy migrando todas las clases que he creado a .net (2008 para ser preciso y espero subirlo este fin de semana) pero por la forma de programación que le di no creo que tengas problemas con 2005.

El editor está programado con VB6 y no tengo pensado migrarlo a .net, pero se encuentra en .exe para su descarga y cualquier problema que  puedas tener me avisas y lo resolveré, aún así los archivos que genera el editor son archivos de texto plano y bastante intuitivos por lo cual se pueden editar a mano en caso de necesidad.
Título: Re: Animación, clase y GUI para crearla
Publicado por: Hechelion en 08 de Noviembre de 2009, 06:04:11 AM
He terminado la migración a VB net de la librería:

Editor de animaciones
Binario
File size:     172032 bytes
Filetype:    PE32 executable for MS Windows (GUI) Intel 80386 32-bit
MD5:    95716d233601482c8e6a4f99102d172b
SHA1:    4532aab4ce2a2b1a83359008fd559b741b1d467f
(http://i35.tinypic.com/a5b32q.jpg)

Descarga Editor Animación Binario (http://www.deitec.cl/descargas/dxlib32/Editor_Anim_Bin.rar)

Descarga Editor Animación Código Fuente (sólo VB6) (http://www.deitec.cl/descargas/dxlib32/Editor_Anim_Source.rar)

Descarga Clase con ejemplo vb6 (http://www.deitec.cl/descargas/dxlib32/ClsAnim_VB6.rar)

Descarga Clase con ejemplo vb .NET (http://www.deitec.cl/descargas/dxlib32/ClsAnim_VBNet.rar)
Título: Re: Animación, clase y GUI para crearla
Publicado por: superbalgas en 08 de Noviembre de 2009, 03:20:23 PM
gracias...

emmm... una sugerencia??... ponete este fondo, por q con el q tenes no se distinge bien las imagenes q pones en el programa xD!!...

---

me puse este y veo muy bien xD... "es del photoshop xd"

http://www.superbalgas.com.ar/ImgPersonal/fondo.png

pongo el link sin los tag de "img" para q no se les descargue la imagen al q no quiere, y para el q quiera verla ingrese al link...
Título: Re: Animación, clase y GUI para crearla
Publicado por: culd en 08 de Noviembre de 2009, 09:08:37 PM
Antes de ayer entre al foro por primera vez para ver que ejemplos y tutoriales habia para esta libreria y encontre este post, baje el fuente y lo probe (no esta actualizacion que hiciste hoy, sino la anterior que solo estaba en vb6.0) y si se cambiaba el foco del form, es decir perdia el foco el dx al volver el foco se trababa mucho mi maquina, mucho mucho constantemente, no revise el codigo para encontrar el problema por que cuando probe las dos veces tuve que reiniciar y la verdad que no lo quise ni revisar... (ojo tengo una phenom 2 x4 810 con 4gb de ram, asi que no es problema de mi maquina, algun bucle mal puesto habra sido la causa).

Ahora asi revisando vi que subiste una actualizacion mas precisamente para .net y me volvio las ganas de probar...

Bueno, descartando la introduccion vamos a los problemas...

En el ejemplo ClsAnim ya sea de 6.0 ó .net no funciona el evento input, o por lo menos aca en esta maquina no lo detecta a ningun evento. Es decir no se mueve el ovni, ni sale con SPACE.
Ahora lo reviso para ver que sera

Pero en fin, me gustaria agregarte al MSN asi hablamos un poco al respecto, ya que quiero iniciar un juego para probar la libreria y veo que ya tenes cancha con ella. Si podes mandame por privado tu msn
Título: Re: Animación, clase y GUI para crearla
Publicado por: Hechelion en 09 de Noviembre de 2009, 12:38:01 AM
Superbalgas se agradece, ya cambie el fondo y subí una nueva revisión, la 1.1.2 del programa (la cual corrige un problema que se producía al agregar imágenes desde distintos path y un par de detalles), también actualicé el post que incluye el MD5 y la revisión de virus.



Culd, realmente extraño lo que comentas, acabo de probar el programa, más el ejemplo en VB6, más el ejemplo en VB net, escuchando música y viendo vídeos en youtube, todo en paralelo y no tuve ningún problema.

Mi máquina es un intel dore 2 de 6300+ con 3 Gb de RAM, el OS fue WinXP SP3.
Igual tengo que instalar Win7 estos días, así que voy a repetir las pruebas con dicho OS.

Que no te reconozca el teclado, me suena al típico problema con el evento HIT de la librería (ese evento utiliza un timer interno el cual no está sincronizado con la parte gráfica y eso causa que dependiendo de la velocidad de la máquina está deje de reconocer las teclas), por lo mismo estoy usando el evento Key en todos los ejemplos actuales, no sabría decirte si en la versión que bajaste usaba los HIT o los KEY, si puedes baja los últimos ejemplos y nos comentas.
Por cierto, "Esc" es para salir y "Space" es para ver la cutre animación de explosión.

Mi MSN es hechelion(a)hotmail.es
Título: Re: Animación, clase y GUI para crearla
Publicado por: superbalgas en 09 de Noviembre de 2009, 07:27:41 PM
me surgio una duda con respecto al dibujo final q hace en el juego...

la pregunta seria... ¿es posible rotar por angulo una animación?... por q yo usaba el MapEx q viene un lugarcito para poner el angulo Y...

y como pase todo a esta clase para hacerlo mas pro.. xD!... me faltó ese detalle de rotación... ¿o tengo q hacer otra animacion las rotaciones?




Edit: le estuve metiendo mano a la clase haber si lo podia hacer xD!!... mas o menos lo hice así...

se lo llama asi a la animación...

CitarCall Piernas_Anim.Draw(287, 128, 0, Angulo) ' en angulo iria el valor en grados...


y en la cls...

modifique la linea
Citar
   Public Sub Draw(ByVal PosX As Long, ByVal Posy As Long, ByVal Z As Long, Optional ByVal Transparencia As Long = 0, Optional ByVal Zoom As Long = 1)

por

CitarPublic Sub Draw(ByVal PosX As Long, ByVal Posy As Long, ByVal Z As Long, Optional ByVal Angulo As Long = 1, Optional ByVal Transparencia As Long = 0, Optional ByVal Zoom As Long = 1)

lo q guardaria el valor en una variable "Angulo" dentro de la clase...

y en la parte donde genera la imagen

CitarCall p_gfx.DRAW_MapEx(Frames(indiceframe).FrameSetImg, PosX + PasosAnim(indiceAnim).OffX, Posy + PasosAnim(indiceAnim).OffY, Z, Frames(indiceframe).info.Width * Zoom, Frames(indiceframe).info.Height * Zoom,  0, dx_lib32.Blit_Alpha.Blendop_Color, Color, Mirror, dx_lib32.Blit_Filter.Filter_None, False)

lo cambié por

CitarCall p_gfx.DRAW_MapEx(Frames(indiceframe).FrameSetImg, PosX + PasosAnim(indiceAnim).OffX, Posy + PasosAnim(indiceAnim).OffY, Z, Frames(indiceframe).info.Width * Zoom, Frames(indiceframe).info.Height * Zoom, Angulo, dx_lib32.Blit_Alpha.Blendop_Color, Color, Mirror, dx_lib32.Blit_Filter.Filter_None, False)

q utiliza el valor angulo en la función...

ahora la cosa es así... la imagen rota con el origen en la parte superior izquierda... osea... no gira desde su eje... si no que "El eje Y lo tendria en la parte superior izquierda..."

eso es lo q tengo hasta ahora xD!!...




una solución seria... capturar el ancho y alto de la imagen, dividirlo por 2, y sumar o restar a las coordenadas para q se mantenga en el centro xD!!...





quiero mi 10!! xD


Título: Re: Animación, clase y GUI para crearla
Publicado por: Hechelion en 10 de Noviembre de 2009, 04:05:35 AM
Felicitaciones por el cambio.

La verdad no sé muy bien como funciona la rotación del MapEx, tendrías que esperar que Ex3 contestara esa pregunta, respecto a la clase, en su momento pensé en agregarlo como opción, pero como no es algo muy común de utilizar al final opté por no incluirlo.

Título: Re: Animación, clase y GUI para crearla
Publicado por: [EX3] en 10 de Noviembre de 2009, 09:54:11 AM
Una pista: DEVICE_SetDrawCenter()

El unico detalle a comentar que no lo deja claro quizas la documentacion en DRAW_MapEx() es que el parametro Center define el centro del sprite no solo como origen de dibujo si no como eje de rotacion, o lo que viene a ser lo mismo, en dx_lib32 el origen de dibujo de un sprite siempre es el eje de rotacion.

Salu2...
Título: Re: Animación, clase y GUI para crearla
Publicado por: superbalgas en 10 de Noviembre de 2009, 01:35:41 PM
ahhhhh pillin y yo haciendo cuentas para centrarlo... xD!!!!... voy a verlo cuando me cambie... toy recien bañado y en bata xD



EDIT:

bueno bueno xD! tonce la modificación de la clase quedaria así ...


Citar
Call Piernas_Anim.Draw(320, 240, 0, Angle, True)
Call Piernas_Anim.Draw(posición X, Posición Y, Z, Valor Angulo, Centrado "por defecto false")

los valores angulo y centrado son opcionales...




en la cls en la parte de

CitarPublic Sub Draw(ByVal PosX As Long, ByVal Posy As Long, ByVal Z As Long, Optional ByVal Transparencia As Long = 0, Optional ByVal Zoom As Long = 1)

lo cambié por

CitarPublic Sub Draw(ByVal PosX As Long, ByVal Posy As Long, ByVal Z As Long, Optional ByVal Angulo As Long = 0, Optional ByVal Center As Boolean = False, Optional ByVal Transparencia As Long = 0, Optional ByVal Zoom As Long = 1)

q tiene como valor perdeterminado Angulo en 0 y Center en False, de lo contrario cambiarlo en la llamada, "Son valores opcionales"




y en donde dibuja el sprite...

CitarCall p_gfx.DRAW_MapEx(Frames(indiceframe).FrameSetImg, PosX + PasosAnim(indiceAnim).OffX, Posy + PasosAnim(indiceAnim).OffY, Z, Frames(indiceframe).info.Width * Zoom, Frames(indiceframe).info.Height * Zoom, 0, dx_lib32.Blit_Alpha.Blendop_Color, Color, Mirror, dx_lib32.Blit_Filter.Filter_None, false)

se lo cambia por

CitarCall p_gfx.DRAW_MapEx(Frames(indiceframe).FrameSetImg, PosX + PasosAnim(indiceAnim).OffX, Posy + PasosAnim(indiceAnim).OffY, Z, Frames(indiceframe).info.Width * Zoom, Frames(indiceframe).info.Height * Zoom, Angulo, dx_lib32.Blit_Alpha.Blendop_Color, Color, Mirror, dx_lib32.Blit_Filter.Filter_None, Center)

q aplicaria los valores Center y Angulo





Título: Re: Animación, clase y GUI para crearla
Publicado por: Hechelion en 05 de Enero de 2011, 12:31:31 AM
Actualización de las clases de Animación (Tanto para VB6 como para NET)

Se agregó la propiedad Pause que permite pausar la animación, aún cuando se siga dibujando con Draw.
Se agregó el parámetro opcional de ángulo a la función DRAW, la cual permite rotar la animación

Se soluciono un problema con el GetRect que no estaba sincronizado con la animación.

PD:  Los link en el primer post.
Título: Re: Animación, clase y GUI para crearla
Publicado por: superbalgas en 09 de Febrero de 2011, 02:46:40 AM
Acabo de hacer una mejoria con respecto al Zoom + Centrar el eje como habia dicho antes xD, y quiero compartirlo ^^ xD

normalmente para dibujar el objeto animado, se usa esta funcion...

Draw(PosX As Long, PosY As Long, Z As Long, Optional Angulo As Single,  Optional Transparencia As Long, Optional Zoom As Long)

La funcion despues de la modificación quedaria así...

Por supuesto me manejo en VB .Net :P

Draw(ByVal PosX As Long, ByVal Posy As Long, ByVal Z As Long, Optional ByVal Angulo As Long = 0, Optional ByVal Center As Boolean = False, Optional ByVal Transparencia As Long = 0, Optional ByVal Zoom As Long = 1)

La manera en que se maneja el zoom, es poniendole 1 o superior para la ampliación, con la siguiente modificación se podra no solo agrandar si no tambien achicar la imagen ingresando un valor menor a 0. xD

mando la funcion completa, x q ni da explicar xD... si hay dudas preguntar xD

    Public Sub Draw(ByVal PosX As Long, ByVal Posy As Long, ByVal Z As Long, Optional ByVal Angulo As Long = 0, Optional ByVal Center As Boolean = False, Optional ByVal Transparencia As Long = 0, Optional ByVal Zoom As Long = 1)
        Dim indiceframe As Integer
        Dim indiceAnim As Integer
        Dim Color As Long

        indiceAnim = CtrlAnim.PasoAnim + Animaciones(CtrlAnim.AnimCurso).PasoInicio
        indiceframe = PasosAnim(indiceAnim).IDframe
        Color = p_gfx.ARGB_Set(255 - Transparencia, 255, 255, 255)

        Dim X_Zoom = Frames(indiceframe).info.Width
        Dim Y_Zoom = Frames(indiceframe).info.Height

        If Zoom > 0 Then
            X_Zoom = Int(Frames(indiceframe).info.Width * Zoom)
            Y_Zoom = Int(Frames(indiceframe).info.Height * Zoom)
        ElseIf Zoom < 0 Then
            X_Zoom = Int(Frames(indiceframe).info.Width / Math.Abs(Zoom))
            Y_Zoom = Int(Frames(indiceframe).info.Height / Math.Abs(Zoom))
        End If

        Call p_gfx.MAP_SetRegion(Frames(indiceframe).FrameSetImg, Frames(indiceframe).info)
        Call p_gfx.DRAW_MapEx(Frames(indiceframe).FrameSetImg, PosX + PasosAnim(indiceAnim).OffX, Posy + PasosAnim(indiceAnim).OffY, Z, X_Zoom, Y_Zoom, Angulo, dx_lib32.Blit_Alpha.Blendop_Color, Color, Mirror, dx_lib32.Blit_Filter.Filter_None, Center)

        CtrlAnim.DuracionPaso = CtrlAnim.DuracionPaso + 1
        If CtrlAnim.DuracionPaso > PasosAnim(indiceAnim).iStep Then
            CtrlAnim.DuracionPaso = 0
            CtrlAnim.PasoAnim = CtrlAnim.PasoAnim + 1
            If CtrlAnim.PasoAnim + Animaciones(CtrlAnim.AnimCurso).PasoInicio > Animaciones(CtrlAnim.AnimCurso).PasoFinal Then
                CtrlAnim.PasoAnim = 0
                If CtrlAnim.Repetir = False Then
                    pLastAnim = CtrlAnim.AnimCurso
                    CtrlAnim.AnimCurso = CtrlAnim.AnimDefecto
                End If
                RaiseEvent StopAnim()
            End If
        End If

    End Sub


Título: Re: Animación, clase y GUI para crearla
Publicado por: Hechelion en 09 de Febrero de 2011, 08:12:45 PM
Me parece genial la idea, pero veo un problema, si quieres un Zoom menor a cero, debes seguir multiplicando, o sea, no necesitas tocas nada, porque si divides por un valor menor a 0, el resultado aumenta, no disminuye.

Me explico mejor con un ejemplo.
Tienes una imagen de 32*32.
Si le aplicas zoom * 2 te queda
32 * 2 = 64

Hasta ahí todo bien, pero que pasa si quieres disminuir a la mitad y aplicas un zoom de 0.5
32 * 0.5 = 16  (Al multiplicar un entero por una fracción menor a cero, el resultado es menor)

32 / 0.5 = 64 (Al dividir por un número menor a 0, el resultado no es menor, sino que aumenta)

Si para achicar quieres usar el mismo zoom pero con valores entre 0 y 1, entonces la función debe siempre estar multiplicando.

Título: Re: Animación, clase y GUI para crearla
Publicado por: superbalgas en 09 de Febrero de 2011, 08:42:09 PM
si, intenté meter con 0.5 pero no me funcionó.... (Cosa  de brujas xD)

y we...  hice rapidito esa modificación que funciona de < ó > a 0 xD

osea... si metes -2 va a disminuir la mitad de su tamaño... si pones 2, agranda el doble de su dimensión.