Entrar
¿Usuario nuevo? Regístrate
allegro-espanol · Una lista en español sobre la librería Allegro.
? ¿Ya estás suscrito? Entrar en Yahoo!

Consejos de Yahoo! Grupos

¿Sabías que...?
Puedes buscar mensajes antiguos en un grupo.

Mensajes

  Mensajes Ayuda
Avanzado
Problemas con funciones   Lista de mensajes  
Responder | Reenviar Mensaje #786 de 9896 |
Re: [AL-ES] Problemas con funciones

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.



Sáb, 4 de Ene, 2003 2:43 pm

gradha@...
Enviar mensaje Enviar mensaje

Reenviar Mensaje #786 de 9896 |
Desplegar mensajes Autor Ordenar por fecha

Hola: Les queria hacer dos consultas. Consulta 1º) Tengo una función para provocar el disparo de una nave: DISPARO_NAVE() { int velocidad_disparo = -10; if...
fallosbsas
Sin conexión Enviar mensaje
4 de Ene, 2003
1:25 pm

... 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...
Grzegorz Adam Hankiew...
gradha@...
Enviar mensaje
4 de Ene, 2003
2:44 pm

... Va muy rapido el disparo porque hasta que no colisione (la condicion del while) el seguira moviendose pero sin dibujarse en pantalla (solo lo dibujas en el...
todoslosnombresestanc...
todoslosnomb...
Sin conexión Enviar mensaje
5 de Ene, 2003
11:16 am

Muchas gracias a todos. Voy a probar lo que me recomendaron y después les cuento. Un saludo....
fallosbsas
Sin conexión Enviar mensaje
13 de Ene, 2003
2:52 pm
Avanzado

Copyright © 2009 Yahoo! Todos los derechos reservados.
Política de Privacidad Actualizada - Condiciones del servicio - Directrices - Ayuda