On Sat, Jan 04, 2003 at 01:25:36PM -0000, fallosbsas wrote:
> Consulta 1º) Tengo una función para provocar el disparo de una nave:
>
> DISPARO_NAVE() {
>
> int velocidad_disparo = -10;
>
> if (key[KEY_SPACE]) {
> [...]
> El problema que tengo con esta función es que el disparo sale
> demasiado rápido, y no puedo solucionarlo disminuyendo el valor
> de la variable "velocidad_disparo".
Si te refieres a que el disparo sale contínuamente, eso es porque la
condición del if es cierta mientras el usario esté pulsando la tecla
(a nivel humano es una pulsación de tecla, a nivel de máquina es
una eternidad), y como tu programa pasará varias veces por segundo
por ese código, tantas veces creará un disparo.
Lo que se hace es complicar la condición añadiendo la información
del momento en el que fue pulsada. Entendiendo 't_' como 'tiempo_':
if (key[KEY_SPACE] && (t_actual - t_retardo > t_ultimo_disparo)) {
t_ultimo_disparo = t_actual;
...
}
Si el tiempo lo tienes en centésimas de segundo, y t_retardo es 10,
entonces el usuario disparará 10 veces por segundo. Si t_retardo
es 50, entonces disparará 2 veces por segundo, etc.
Otra cosa que suelen hacer los juegos es evitar el 'autofire',
obligando al usuario a soltar la tecla. Esto complica más
la verificación porque añade otra variable de estado en la que
almacenas si la tecla no estaba pulsada en el 'frame' anterior,
pero casi es lo mismo.
> Consulta 2º) La función DISPARO_NAVE interfiere con la función
> MOVER_ENEMIGO. Es decir, disminuye el rango de rebote. [...]
Esto no lo entiendo.