Ayuda con movimiento usando vectores :. Haciendo un RTS

Consulte acerca de programas, técnicas, algoritmos etc.

Ayuda con movimiento usando vectores :. Haciendo un RTS

Notapor Metator de Arkalot » Dom May 04, 2008 9:52 pm

Pues este es mi primer tema, espero pueda alguien ayudarme. :D

Estuve leyendo un libro sobre programación de juegos con pygame
y en un ejercicio hice una animación de una pelota que se dirige hacia
donde haces clic con el ratón, como en un juego de estrategia.

Imagen
hacervideojuegos.com/losersjuegos/vectores.png

El programa funciona bien e incluso muestra información acerca
de las coordenadas de la pelota y el lugar hacia donde se dirige, pero
esta no se detiene en su destino, sino que sigue en esa dirección
hasta que con el ratón le indicamos que vaya hacia otro lado.
Intenté solucionarlo comparando si su posición es igual a las
coordenadas de destino:

If posición == destino:

Pero nomas no funciono, y creo que podría arreglarlo checando
si su distancia hacia la posición de destino es poca, para que se
detenga cuando la magnitud del vector sea 0 o algo asi, pero
preferiría que se detuviera exactamente en la posición de destino,
pero nomas no supe como hacerlo.

El archivo con el código fuente y algúna información útil:
http://uploading.com/files/b26ede7b/vectores.zip#downloadform

Veran que el panel azul de abajo podría servir para mostrar información
de unidades, minimapas y esas cosas de los juegos de estrategia, que
seria lo que quiero hacer, apenas sepa como detener la unidad cuando
llegue a donde le indico.
Última edición por Metator de Arkalot el Dom Oct 11, 2009 12:29 am, editado 4 veces en total
Avatar de Usuario
Metator de Arkalot
 
Mensajes: 34
Registrado: Mié Abr 23, 2008 2:17 am
Ubicación: México ñ_ñ !!

Notapor hugoruscitti » Dom May 04, 2008 11:36 pm

Saludos, posiblemente el objeto no se detenga porque la condición que
utilizas para detenerlo es muy exacta. Por ejemplo tu quieres detener
el objeto cuando su posición x sea 300 y el objeto avanza de a 7 píxeles,
en ese caso puede que nunca llegue a valer exactamente 300, podría valer
290, 297, 304 ... etc.

Una buena forma de evitar esos inconvenientes es detener el objeto en
base a una distancia (como has comentado antes). Por ejemplo si mueves
el objeto a una velocidad de 7 píxeles, podrías comprobar en cada
movimiento si el objetivo está a una distancia menor a 7 píxeles. En cuyo
caso no tendrías que avanzar los 7 píxeles sino menos, para colocar
el objeto en el punto exácto a donde quieres llegar.

Por cierto, algo similar ocurre cuando quieres que un personaje de juego de
plataformas pueda "saltar" y detenerce justo cuando toca una plataforma con
los pies. En la web hay un artículo que explica esta dificultad de las
plataformas:

http://www.losersjuegos.com.ar/referenc ... formas.php

Saludos, y bienvenido.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Notapor Metator de Arkalot » Lun May 05, 2008 12:35 am

Hum, me lo imagine, entonces lo que hare sera que cuando la
magnitud del vector(distancia al puto de destino) sea pequeña,
le pongo:

Código: Seleccionar todo
if magnitud(AB) < 7: # si la distancia es poca puej.
    posicion = destino
    velocidad_o_direccion = 0
Última edición por Metator de Arkalot el Jue Sep 25, 2008 5:15 pm, editado 1 vez en total
Avatar de Usuario
Metator de Arkalot
 
Mensajes: 34
Registrado: Mié Abr 23, 2008 2:17 am
Ubicación: México ñ_ñ !!


Volver a General

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

cron