Requeteguay escribió:Estaba intentando dar un control de tiempo entre pulsaciones dentro del código del juego de Volleyball.
¿Cómo podría plantear un control de los intervalos de tiempo entre teclas? Me explico: para golpear la pelota hay que pulsar la tecla UP, pero me gustaría que se pudiese pulsar después de pasados (cómo poco) 0,5 seg. contando desde la última pulsación de la tecla UP (sólo para esta acción, el control de tiempo no se daría con los otros botones).
No estoy muy seguro de poder resolver esa inquietud. Aún así te comentaré algunas ideas:
Se podría añadir una variable como contador en la estructura personaje. Esa variable representaría tu contador de tiempo; será algo limitado pero sencillo y fácil de implementar:
- Código: Seleccionar todo
struct Personaje
{
int tiempo_desde_ultimo_salto;
[...] // otras variables en la estructura
};
En la sección de código que administra el inicio del "salto" de personaje se tendría que realizar un pequeño cambio para registrar el instante en que se produce el "salto":
- Código: Seleccionar todo
if (control_pulso (data->control, LEFT))
{
data->tiempo_desde_ultimo_salto = 0;
personaje_cambiar_estado (data, personaje_iniciar_izquierda,
personaje_izquierda);
}
Para que la variable "tiempo_desde_ultimo_salto" funcione como un contador de tiempo tendríamos que actualizar su valor regularmente.
En el juego Volleyball, el bucle principal del programa llama regularmente a una serie de funciones clasificadas como lógicas, por ejemplo "personaje_actualizar". Realizo este comentario porque, de querer implementar un contador, sería útil actualizarlo dentro de una función "lógica", que será llamada regularmente (creo que 100 veces por segundo, si recuerdo bien):
Así, para actualizar la variable podrías utilizar el siguiente cambio en la función "personaje_actualizar":
- Código: Seleccionar todo
void personaje_actualizar (Personaje * data)
{
/* si esta función se ejecuta 100 veces por segundo, entonces
cuando la variable 'tiempo_desde_ultimo_salto' vale 100 transcurrió
1 segundo, cuando vale 200 transcurrieron 2 segundos ... */
if (data->tiempo_desde_ultimo_salto % 100 == 0)
{
printf ("Desde el último salto transcurrieron: ");
printf ("%d segundos", data->tiempo_desde_ultimo_salto / 100);
printf ("\n";
}
/* se aumenta el contador de tiempo */
data->tiempo_desde_ultimo_salto ++;
data->estado (data);
}
Requeteguay escribió:Siento hacer tantas preguntas ^^. Muchas gracias.
Por favor, siempre son bienvenidas.
Saludos.