Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Delay en C

Estas en el tema de Delay en C en el foro de C/C++ en Foros del Web. Hola! Soy nuevo y el foro me ha parecido de lo más interesante. Además, estoy aprendiendo a programar en C (llevo algunos meses) y quisiera ...
  #1 (permalink)  
Antiguo 17/03/2007, 20:11
 
Fecha de Ingreso: marzo-2007
Mensajes: 3
Antigüedad: 17 años, 1 mes
Puntos: 0
Delay en C

Hola! Soy nuevo y el foro me ha parecido de lo más interesante. Además, estoy aprendiendo a programar en C (llevo algunos meses) y quisiera hacer un juego. El problema, es que necesito alguna función que me de un retardo en milisegundos (para una animación fluída, pues la sleep() funciona pero en segundos)

Me dijeron de la función delay(int) pero no sé en qué librería encontrarla o si necesito actualizar las que tengo. Ya incluí <stdio.h>, <conio.h>, <stdlib.h>, <dos.h>, <time.h> y en ninguna de éstas se encuentra la función

¿Alguien podría ayudarme?
  #2 (permalink)  
Antiguo 18/03/2007, 21:56
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
Re: Delay en C

que tal......
y no sera que ese metodo de alguna otra libreria como SDL o algo asi?

por cierto, no se como funcione sleep o delay, pero suena a que lo que hacen es PARAR el programa el tiempo especificado, y eso NO ES NADA recomendado, sobre todo si un juego lo que estas haciendo....

Puedo preguntar.....cual es el problema con tu animacion?
es un gif y quieres que tarde un poco mas cada frame que pasa de la animacion?
o simplemente es por ejemplo, el salto de un personaje, y quieres que sea vea "mejor" como va subiendo y luego bajando?

saludos,
  #3 (permalink)  
Antiguo 19/03/2007, 08:52
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Re: Delay en C

En tal caso, como te dice blackwind, no uses ninguna funcion para parar el programa.
Hay algunas tecnicas para poder retardar las animaciones y para esto necesitas una funcion para obtener el numero de milisegundos que han transcurrido desde que iniciaste el sistema operativo. Desafortunadamente no existe una manera estandar de hacer esto. Asi que aqui tomaras una desicion.
Lo vas a hacer solo para windows? Usa GetTicksCount(). No se te olvide incluir windows.h

Si quieres que sea ligeramente mas portable, baja e incluye la libreria SDL y usa SDL_GetTicksCount()..(o algo asi se llama, checa la documentacion.)

El truco que generalmente uso es checar el tiempo que ha transcurrido entre frame y frame y si el tiempo es muy corto pues no avanzar de frame sino hasta que se llegue a cierto tiempo donde doy la orden de que se muestre el siguiente frame.
De esta manera puedes tener las animaciones muy bien controladas..

Saludos
  #4 (permalink)  
Antiguo 19/03/2007, 12:50
 
Fecha de Ingreso: marzo-2007
Mensajes: 3
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Delay en C

Bueno, todavía no sé usar imágenes, es muy poco lo que llevo aprendido pero lo que quiero hacer es algo como:


Código:
while(1)
{
  clrscr();  
  gotoxy(x,y);
  printf("G");
  y++;
  delay(200);
} //Es solo un ejemplo para que vean lo que quiero hacer
Es algo muy sencillo tal vez, pero necesito hacer esa pausa
  #5 (permalink)  
Antiguo 19/03/2007, 17:05
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
Re: Delay en C

bueno, antes de que vengan a decirte que no uses gotxy() y todas esos metodos no standard (lo cual no deberias jeje), yo pienso que si tu objetivo es hacer juegos, es tambien muy importante ( o mas ) aprender que NUNCA debes de usar delay() o funciones similares, ya con eso perderas valiosos segundos de calculos que algun dia desearas tener (yo estoy pasando por algo asi ahorita con mi juego).

ahora, en este tipo de casos, hacer un ciclo asi, es algo DEMASIADO rapido, y por eso te ves forzado a usar delay().

Bueno, ahora que sabes eso, para hacer lo que tu quieres tienes 2 opciones:
1.- Hacer tu movimiento basado en el tiempo.
2.- Manejar el movimiento con el teclado y/o el mouse. (el cual tambien deberia de implementar el movimiento basado en el tiempo)

El movimiento basado en tiempo (Time Based Movement), es para que puedas mantener a cierta velocidad el movimiento de tus objetos, en este caso seria para controlar la velocidad con que se mueve la "g". Para esto debes calcular el tiempo (en segundos) entre cada frame (cada que se procesa un ciclo), luego, multiplicar el tiempo transcurrido por la velocidad que deseas.

Realmente nunca pase por tratar de aplicar algo asi a un programa en modo consola, pero en teoria deberia de poderse implementar tambien.

Lo que te recomiendo, es que si ya sabes C, y ya quieres empezar a hacer pruebas de animacion, empieces a aprender una libreria que te permita trabajar en modo de ventana. Te recomendaria usar SDL o Allegro. Con esto, ya vas a poder desplegar dibujos de forma MUY MUY sencilla (puede ser desde 1 pixel, hasta imagenes de diversos formatos), y hacer el tipo de pruebas que estas tratando ahorita....

aqui los links para allrego y sdl....
http://alleg.sourceforge.net/index.es.html
http://www.libsdl.org/
  #6 (permalink)  
Antiguo 20/03/2007, 20:54
 
Fecha de Ingreso: marzo-2007
Mensajes: 3
Antigüedad: 17 años, 1 mes
Puntos: 0
Sonrisa Gracias a todos

Les agradezco mucho su ayuda, pero solamente quiero saber cómo hacer una pausa en milisegundos... yo me encargo de lo demás, enserio !

Voy aprendiendo poco a poco, pero por el momento solo quiero saber eso...

¿Cómo hago para crear una pausa en milisegundos?
  #7 (permalink)  
Antiguo 20/03/2007, 23:03
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Re: Delay en C

No se si no has leido bien pero creo que ya te he respondido.

Saludos
  #8 (permalink)  
Antiguo 21/03/2007, 09:29
 
Fecha de Ingreso: octubre-2003
Ubicación: Concepción
Mensajes: 84
Antigüedad: 20 años, 6 meses
Puntos: 0
Re: Delay en C

Si te sirve de ayuda y obviamente te sugiero que prestes atencion a los post anteriores, hay una funcion de la libreria estándar de C #include <unistd.h> que se llama usleep() que te permite pausar en microsegundos.

Espero que te sirva... suerte
  #9 (permalink)  
Antiguo 21/03/2007, 09:44
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: Delay en C

Cita:
Iniciado por heraldex Ver Mensaje
hay una funcion de la libreria estándar de C #include <unistd.h> que se llama usleep() que te permite pausar en microsegundos.
En realidad usleep no es una funcion standard de C sino de POSIX.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #10 (permalink)  
Antiguo 21/03/2007, 09:51
 
Fecha de Ingreso: octubre-2003
Ubicación: Concepción
Mensajes: 84
Antigüedad: 20 años, 6 meses
Puntos: 0
De acuerdo Re: Delay en C

Cita:
Iniciado por Eternal Idol Ver Mensaje
En realidad usleep no es una funcion standard de C sino de POSIX.
Tienes razon, sin embargo si Grillo escribe su programa en un Linux/Unix debería ver el resultado al utilizar esta funcion..... A menos que gotoxy() no sea compatible en uni *Nix
  #11 (permalink)  
Antiguo 21/03/2007, 09:55
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: Delay en C

Cita:
Iniciado por heraldex Ver Mensaje
Tienes razon, sin embargo si Grillo escribe su programa en un Linux/Unix debería ver el resultado al utilizar esta funcion..... A menos que gotoxy() no sea compatible en uni *Nix
Efectivamente ya que son compatibles con POSIX. gotoxy es basura creada por Borland ... 0% standard, hay algunos ports por ahi pero ...

De cualquier manera el esta usando un compilador de Borland de 16 bits para MS/DOS.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #12 (permalink)  
Antiguo 21/03/2007, 10:01
 
Fecha de Ingreso: octubre-2003
Ubicación: Concepción
Mensajes: 84
Antigüedad: 20 años, 6 meses
Puntos: 0
Re: Delay en C

Intenta con algo asi, es un poco rustico pero ahi va:

void espera(int i){
int pausa = 0;
while (pausa < i)
pausa++;
}

while(1)
{
clrscr();
gotoxy(x,y);
printf("G");
y++;
espera(200);
} //Es solo un ejemplo para que vean lo que quiero hacer
  #13 (permalink)  
Antiguo 21/03/2007, 14:20
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
Re: Delay en C

el problema con ese codigo es que dependera 100% de que tan pontente sea tu maquina.....

pero para los objetivos de grillo, creo que es una solucion "bastante aceptable"....aunque seguramente tendra que pasarle 2000 a la funcion, y hacer una simple suma o algo asi....

saludos,
  #14 (permalink)  
Antiguo 21/03/2007, 14:25
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: Delay en C

Mientras no lo intente hacer en un compilador de verdad que haga desaparecer todo el codigo
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #15 (permalink)  
Antiguo 21/03/2007, 15:35
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Re: Delay en C

cierto, en visual C++ y en gcc con sus modificadores de optimizacion respectivos simplemente hace desaparecer ese codigo, asi que hay que tener cuidado.

Saludos
  #16 (permalink)  
Antiguo 27/02/2008, 17:06
 
Fecha de Ingreso: febrero-2008
Mensajes: 1
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: Delay en C

Hola a todos.

No sé muy bien si en C existe la función [B]delay[B]. Yo la he utilizado en Pascal. De todas formas creo que eso es menos importante que hacer buenos programas. Igual que el gotoxy, siempre lo he odiado.
Así que bueno, lo único que puedo decir es que si quieres un retardo uses usleep como han comentado antes. Mide en ms creo, así que tendrás que ponerle un valor alto, usleep(20000) por ejemplo.
Nada más.

Un saludo.
  #17 (permalink)  
Antiguo 27/02/2008, 17:28
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: Delay en C

Cita:
Iniciado por manitou Ver Mensaje
Hola a todos.

No sé muy bien si en C existe la función [B]delay[B]. Yo la he utilizado en Pascal. De todas formas creo que eso es menos importante que hacer buenos programas. Igual que el gotoxy, siempre lo he odiado.
Así que bueno, lo único que puedo decir es que si quieres un retardo uses usleep como han comentado antes. Mide en ms creo, así que tendrás que ponerle un valor alto, usleep(20000) por ejemplo.
Nada más.

Un saludo.
Este hilo tiene casi un año ...
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 01:18.