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
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
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
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
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...
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