bueno no se si esto es un bug del timer o mio
lo que intento es guardar un descanso de x milisegundos entre turno de jugador y judaor
tengo en el bucle principal algo así
cuando la acción es fin turno realiza lo siguiente
If p.pausa Then 'comprobamos si ha pasado el tiempo de espera
p.siguiente_jugador 'busca el jugador siguiente
juego.accion = "recursos" 'cambiamos a la acción por defecto
End If
'contador de las pausas entre jugadores
private tim_pausa As Long 'guarda el identificador del timer
private pide_pausa As Boolean 'indicador de si anda activado o no
'el timer ya se encuentra activado
Public Function pausa() As Boolean
'si no anda activo el timer lo activamos
If pide_pausa = False Then
m_System.TIMER_Reset (tim_pausa)
pide_pausa = True
End If
'comprobamos tiempos
If pide_pausa And (m_System.TIMER_GetValue(tim_pausa) >= 600) Then
'tiempo ok
pide_pausa=false
pausa = True
Else
'tiempo no
pausa = False
End If
End Function
Public Function pausa() As Boolean
If pide_pausa = False Then
tim_pausa = m_System.TIMER_Create()
pide_pausa = True
pausa = False
Else
If m_System.TIMER_GetValue(tim_pausa) >= 600 Then
m_System.TIMER_Kill (tim_pausa)
pide_pausa = False
pausa = True
Else
pausa = False
End If
End If
End Function
la segunda función funciona y la primera no ... y no entiendo el porque, al meterle el reset lo reinicia a 0, pero sigue contando no?
Cita de: "RobiHm"al meterle el reset lo reinicia a 0, pero sigue contando no?
Exacto.
TIMER_Reset() reinicia el valor del cronometro a 0 pero el cronometro sigue su cuenta a partir de 0. Aqui tienes un breve ejemplo de implementacion de espera por intervalo de tiempo con un cronometro:
Option Explicit
Dim m_System As New dx_System_Class
Dim timerID As Long
Dim value As Long
Private Sub Form_Load()
Call Me.Show
timerID = m_System.TIMER_Create()
Do
If (Interval(1000)) Then
value = value + 1
Cls
Print CStr(value)
End If
DoEvents
Loop
End Sub
Private Function Interval(Time As Long) As Boolean
If (m_System.TIMER_GetValue(timerID) >= Time) Then
Call m_System.TIMER_Reset(timerID)
Interval = True
End If
End Function
Private Sub Form_Unload(Cancel As Integer)
Call m_System.TIMER_Kill(timerID)
Set m_System = Nothing
End
End Sub
El reincio del cronometro solo deberas hacerlo si la condicion de tiempo con el cronometro es verdadera, por lo que el estado de espera de un intervalo siempre sera verdadero o falso. El codigo que has puesto arriba me ha despistado un poco al ver que tienes 3 casos en el que uno resetea el cronometro, otro lo evalua y otro devuelve falso.
Salu2...
en el primer ejemplo he desglobado todo para que se viese mejor
taba en un if, como el crono no tiene un pause (una gran desventaja frente a los timers) le agrego esa variable que dice si ha sido reseteado o no xk después del intervalo como bien has dicho sigue a su rollo y claro supongo que sale "más rentable" destruirlo y volverlo a crear que dejarlo que siga y comprobar con la variable si ha sido activado ... un cipote por el tema de no tener pause xD
gracias por el ejemplo pero no es aplicable cuando la comprobación no es continua
Vale, si no he entendido mal lo que buscas a groso modo es poder pausar el cronometro. Dicho esto una breve modificacion e implementacion en el ejemplo anterior:
Form1.frm
Option Explicit
Public m_System As New dx_System_Class
Dim tTimer As New Timer
Dim value As Long
Private Sub Command1_Click()
tTimer.Paused = Not tTimer.Paused
If tTimer.Paused Then Command1.Caption = "Continuar" Else Command1.Caption = "Pausa"
End Sub
Private Sub Form_Load()
Me.AutoRedraw = True
Call Me.Show
Set tTimer = New Timer
Do
If (Interval(1000)) Then
value = value + 1
Cls
Print CStr(value)
End If
DoEvents
Loop
End Sub
Private Function Interval(Time As Long) As Boolean
If (tTimer.value() >= Time) Then
Interval = True
Call tTimer.Reset
End If
End Function
Private Sub Form_Unload(Cancel As Integer)
Set tTimer = Nothing
Set m_System = Nothing
End
End Sub
La implementacion que yo haria del cronometro:
Timer.cls
Option Explicit
Private timerID As Long
Private paused_ As Boolean
Public Property Get Paused() As Boolean
Paused = paused_
End Property
Public Property Let Paused(value As Boolean)
paused_ = value
If Not Value Then Call Form1.m_System.TIMER_Reset(timerID)
End Property
Public Property Get value() As Long
If Not paused_ Then value = Form1.m_System.TIMER_GetValue(timerID)
End Property
Public Sub Reset()
Call Form1.m_System.TIMER_Reset(timerID)
End Sub
Private Sub Class_Initialize()
timerID = Form1.m_System.TIMER_Create()
End Sub
Private Sub Class_Terminate()
Call Form1.m_System.TIMER_Kill(timerID)
End Sub
Con esto pausas el cronometro para que no te devuelva valor alguno y reinicie el conteo desde 0. No se si es exactamente lo que buscas o si se acerca a lo que necesitas. Es que en verdad destruir y crear de nuevo el cronometro surte el mismo efecto que si lo reseteas, osea, obtener un cronometro a tiempo 0.
Salu2...