Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





problemas con un timer

Iniciado por predator, 26 de Abril de 2008, 01:57:51 AM

« anterior - próximo »

predator

este es mi codigo, y simplemente no funciona el timer, lo e probado cambiando el form.caption y no cambian la animacion, estoy haciendo algo mal?
Private Sub Form_Load()
Me.Show
Call m_gfx.Init(Me.hWnd, 800, 576, , True)
spr1 = m_gfx.MAP_Load(App.Path & "\texturas\12.png", 0)
spr2 = m_gfx.MAP_Load(App.Path & "\texturas\13.png", 0)
Looping = True

Do While Looping

If anim = 0 Then
Call m_gfx.DRAW_Map(spr1, 10, 10, 0, 0, 0)
ElseIf anim = 1 Then
Call m_gfx.DRAW_Map(spr2, 10, 10, 0, 0, 0)
End If


Call m_gfx.DRAW_Map(spr1, 10, 128, 0, 0, 0)
Call m_gfx.DRAW_Map(spr2, 10, 64, 0, 0, 0)


'Ejecutamos las llamadas de la clase grafica:
   Call m_gfx.Frame
Loop
Call m_gfx.MAP_Unload(spr1)
Call m_gfx.MAP_Unload(spr3)
End Sub

Private Sub Timer1_Timer()
If anim = 1 Then anim = 0
If anim = 0 Then anim = 1
End Sub

predator

wow soy bastante estupido el timer esta mal cambia el valor a 0 y luego lo vuelve a vambiar a 1 xD
Hay alguna manera de cambiar eso que funcione como debe?, y alguna otra manera de no ser tan despistado? 0.0

Mars Attacks

Pues no sé exactamente qué intentas hacer, pero bastaría un else para que anim sólo cambiara de valor una vez dentro de Timer1_Timer().

If anim = 1 Then anim = 0
ElseIf anim = 0 Then anim = 1

predator

lo que quiero hacer es que el timer este cambiando el valor de anim, y asi mostrar la animacion, asi puedo controlar la velocidad de la animacion

Quedo funcionando justo como queria

[EX3]

Mars te dio la solucion al problema actual, yo añado y te propongo lo siguiente para las animaciones futuras que implementes :)

Si almacenaras todos los fotogramas de la animacion en un array solo tendrias que ir incrementando el valor del indice del array en cada ciclo del timer. Por ejemplo:

Funcion donde programarias la carga de todos los fotogramas en el array. Yo soy partidiario de meter todos los fotogramas dentro de una misma textura, por temas de rendimiento, y utilizar MAP_SetRegion() para dibujar la parte de la textura que necesites, en tu caso, al tener separados los fotogramas en texturas individuales tendras que tenerlas llamadas con un nombre igual mas el numero de su posicion:
Dim arrFrames() As Long

...

Sub CargarFrames()
   Dim i As Long

   ReDim arrFrames(13)
   For i = 0 To 13
       arrFrames(i) = gfx.MAP_Load("frame" & CStr(i) & ".png", 0) ' Suponiendo que tus texturas se llamen "frame1.png", "frame12.png", etc...
   Next
End Sub


Creas un cronometro con dx_lib32, asi te ahorras el tener que meter controles indivudales en la ventana:
Dim sys As New dx_System_Class

...

Dim idTimer As Long
idTimer = sys.TIMER_Create()


Una simple animacion:
Dim i As Long
...

If sys.TIMER_GetValue(idTimer) => 1000 Then ' Si el valor del cronometro es igual o mayor al intervalo definido (un segundo en este caso):
   Call sys.TIMER_Reset(i) ' Reiniciamos la cuenta del cronometro.
   i = i + 1 '  Incrementamos la posicion del indice.
   If i > UBound(arrFrames) Then i = 0 ' Si el indice es mayor al numero de fotogramas reiniciamos el indice a 0.
End If

' Dibujamos el fotograma correspondiente:
Call gfx.DRAW_Map(arrFrames(i), 10, 10, 0, 0, 0)

Eso dibujaria la animacion cambiando los fotogramas cada segundo (1000 milisengundos).

Cuando te veas en la necesidad de aplicar varias animaciones en tu juego descubriras que este metodo es mas comodo y flexible que meter tropecientos controles Timer en el formulario y mejor que declarar mil variables para cada fotograma ;)

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

NEBIRE

Cita de: "predator"lo que quiero hacer es que el timer este cambiando el valor de anim, y asi mostrar la animacion, asi puedo controlar la velocidad de la animacion

Quedo funcionando justo como queria

es más sencillo ponerlo como un boolean y en el evento timer decirle

Anim= not Anim y listo






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.