elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 03:16  


Tema destacado: Suscripción al boletín mensual de elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo, raul338)
| | |-+  detener el código
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: detener el código  (Leído 602 veces)
Hans el Topo


Desconectado Desconectado

Mensajes: 1.748


"Estoy cansado de no hacer nada"


Ver Perfil WWW
detener el código
« en: 14 Enero 2007, 22:23 »

buenas, ave quien me exa una mano con un problemilla porque no se me ocurre nada para solventarlo

ando haciendo un jueguecillo basado en turnos
cuando la IA de las tropas controladas por el ordenador se van a mover buscan zonas a su alrededor factibles, baratan posibilidades,
 
una de esas posibilidades es atacar a otra unidad, entonces aparece una pequeña animación del combate, pero claro como los calculos son rapidismos y la animación es más lenta pues he añadido un timer que controle el tema,

el problema aparece cuando dos unidades atacan a una misma,
usease cuando ataca a una que se supone que esta luchando, puesto que el proceso sigue aunque la animación este apareciendo, mi pregunta es como detener el proceso durante unos instantes,
he probado con sleep pero detiene todo, y un bucle es sobrecargar la cpu sin sentido

¿a alguien se le ocurre alguna solución?


En línea

 
Hendrix
In The Kernel Land
Colaborador
***
Desconectado Desconectado

Mensajes: 2.272



Ver Perfil WWW
Re: detener el código
« Respuesta #1 en: 14 Enero 2007, 22:30 »

Puedes pausar el codigo kon este bucle:

Código:
Private Sub Wait(ByVal nSec As Integer)
    'Esperar un número de segundos
    Dim t1 As Date, t2 As Date

    t1 = Second(Now)
    t2 = t1 + nSec
    Do
        DoEvents
    Loop While t2 > Second(Now)
End Sub

No se sobrecargaria gracias al DoEvents.

Es una alternativa al sleep que uso bastante.

Salu2



En línea

"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián
Hans el Topo


Desconectado Desconectado

Mensajes: 1.748


"Estoy cansado de no hacer nada"


Ver Perfil WWW
Re: detener el código
« Respuesta #2 en: 14 Enero 2007, 23:00 »

creo que tu código esta mal no?

guardas lo que devuelve second (un valor variant entre 0-59) en un date, por lo tanto el date te lo inicia a por defecto, que es 1900 bla bla bla

luego le sumas a t2, que es una fecha t1 que es el valor por defecto (t1 y t2 valen lo mismo) le sumas los segundos... y luego comparas una fecha con segundos?

bueno estuve revisandola y creo que asi si queda como pretendias

Código:
Private Sub Wait(ByVal nSec As Integer)
    'Esperar un número de segundos
    Dim t2 As Date

    t2 = DateAdd("s", nSec, Now)
    Do
        DoEvents
    Loop While t2 > Now
End Sub

de este modo evitamos el problema que tendríamos al pasarnos del valor 59 si solo lo hiciesemos con segundos

muchas gracias Hendrix
En línea

 
NYlOn


Desconectado Desconectado

Mensajes: 842


OOOOHHHHHH, TARAGÜIIII xDDDDDD


Ver Perfil WWW
Re: detener el código
« Respuesta #3 en: 15 Enero 2007, 09:22 »

Lo correcto seria usar la clase Timer:
Código:
Public Sub Esperar(Segundos As Long)
    Dim n1 As Long
    n1 = Timer
    Do While Timer - n1 < Segundos
        DoEvents
    Loop
End Sub

Aunque hay muchas alternativas funcionales...

Saludos.-
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines