Jump to content
  • ¡Hola, Invitado! Únete a nuestra comunidad y construyamos juntos algo increíble.

    ¡Bienvenido a nuestra comunidad! Al unirte, formarás parte de una comunidad apasionada por MAPPING. Para participar activamente, simplemente haz clic en el botón ‘Conectarse’ o ‘Registrarse’. Una vez registrado, podrás publicar mensajes, compartir tus experiencias y explorar los diversos foros disponibles. ¡Esperamos verte pronto y compartir momentos increíbles juntos!

[Tutorial] Manipulacion de Vectores

Valorar este tema


Publicaciones recomendadas

Publicado (editado)

ATENCION: Para entender y comprender este tutorial debes saber al menos que es un Vector y una Entidad comun.

 

Estoy mas aburrido que jugando CS con bots, asi que decidi hacer un tutorial, con el block de notas, el cual te podra enseñar algo de manipulacion de vectores.

 

Digo de antemano, si sos novato, no te recomiendo ver esto dado que podras confundirte mucho.

 

1. Obtener vector de velocidad entre 2 puntos.

 

Aqui un pequeño code, con todo explicado, el cual te da a mostrar, como puedo obtener una direccion entre 2 puntos (ya sea para hacer una especie de knockback, un empujon de una explosion, etc. Una demostracion en una imagen:

 

pic1r.png

 

La cruz azul, es un player, mirando para el lugar que sea

La cruz roja, es el punto al cual nosotros queremos obtener una direccion

La cruz negra, es un player que esta metido en la nada caminando por ahi matando cts (we)

 

El siguiente codigo explica como hacer que el pibe de cruz negra sea empujado a la direccion entre la cruz azul y roja:

 

// Demos por ejemplo:
// vecOrigin es el vector de la Cruz Azul
// vecTarget es el vector del lugar al cual queremos obtener una direccion

#include  // aqui necesitaremos XS, para facilitarnos los calculos que haremos con los vectores.

new Float:vecDirection[3] // creamos un vector, el cual contendra la direccion entre estas 2 cruces

xs_vec_sub(vecTarget, vecOrigin, vecDirection)
// Aqui van las explicaciones de math:
// xs_vec_sub hace que 2 vectores se resten, sacando el resultado en el tercer parametro.
// La sintaxis es la siguiente:
// (VECTOR AL CUAL QUEREMOS OBTENER LA DIRECCION) RESTADO POR (VECTOR DE PARTIDA)
// Asi restandolos, obtenemos un vector, el cual se puede de manipular de varias formas.

// Explicaciones extras:
// El vector de direccion que obtuvimos, si se lo sumamos a vecOrigin, nos dara la posicion de vecTarget, ya que de ahi lo restamos
// Para el que sabe de los vectores de velocidad, el vector vecDirection lo podemos considerar como un vector de "velocidad",
// Si nosotros le seteamos la velocidad a una entidad, el vector vecDirection, saldra disparado a la direccion ya especificada (la direccion entre la cruz azul y la roja)
// La incognita en este caso es...: cual fuerte sera ese empujon que recibira la entidad?
// "La fuerza con la que sera empujado esta entidad X, sera equivalente a la distancia entre la Cruz Azul y la Roja" eso hay que tenerlo claro.
// La distancia la podemos medir con xs_vec_len, pueden hacer logs en su consola para que noten que es verdad.
// Que pasa si nosotros queremos cambiar la fuerza del vector, pero sin necesidad de modificar su direccion/angulo de vista?
// Continuamos el code con esto:

xs_vec_normalize(vecDirection, vecDirection)
// xs_vec_normalize hara que cualquier vector de velocidad, CUALQUIERA, haga reducir su fuerza al valor minimo (0.000000001).
// Tal como lo dice la funcion, "normalisa" un vector. De esta forma, podemos resetear la velocidad de un vector sin modificar su direccion.
// Pero..., el valor es el minimo, como hago para setearle la fuerza que yo quiera?
// Continuamos el code con esto:

xs_vec_mul_scalar(vecDirection, 500.0, vecDirection)
// xs_vec_mul_scalar hara que un vector, se auto-multiplique en el valor puesto en el segundo parametro, que es 500. (como Float)
// Si despues de ejecutar esta funcion, logeamos en consola su intensidad con xs_vec_len, nos devolvera 500, dado que los vectores del HL Engine fueron diseñados asi, quien sabe porque magicamente ocurrira, es uno de los muchos misterios de la matematica.
// Ahora, la fuerza/potencia/intensidad del vector de velocidad, sera 500.
// Finalmente, ya tenemos el vector preparado.
// Este empujara a cualquier entidad, a la distancia entre "la cruz azul y la roja" con una potencia de 500 centimetros.
// Ahora, vamos a setearle la velocidad a la cruz negra:

entity_set_vector(IdDelPlayerDeLaCruzNegra, EV_VEC_velocity, vecDirection)
// Los entvars de velocidad de la entidad fueron modificados al vector fabricado.
// El resultado, pueden verlo en un dibujo mostrado justo abajo de esta linea:

pic2aw.png

 

Finalmente, ese seria el resultado. El player de la cruz negra sera lanzado a los calculos ya dichos repetidas veces.

 

2. Obtener el angulo requerido para mirar a un cierto punto

 

Para esto, usaremos como base el minitut del punto 1.

 

Aqui explicaremos, de una forma facilisima, como hacer que unos angulos miren directamente a una coordenada cualquiera.

 

Simplemente, 4 lineas:

 

// vecOrigin es el vector de la posicion del jugador
// vecTarget es la posicion a la cual queremos mirar

new Float:vecAngles[3] // El vector que guardara los angulos
xs_vec_sub(vecTarget, vecOrigin, vecAngles) // la direccion de el player al punto que queremos obtener
xs_vec_normalize(vecAngles, vecAngles) // reseteamos el vector de velocidad a su valor minimo

vector_to_angle(vecAngles, vecAngles) 
// Aqui es la parte interesante.
// vector_to_angle, les hara todo el trabajo, de transformar el vector de direccion, en un angulo, *cosa que no son lo mismo*
// Ya tenemos los angulos recien salidos del horno, ahora, debemos aplicarlo a la entidad

// Si es a un Player:
entity_set_vector(IdDelPlayer, EV_VEC_v_angle, vecAngles) // Modificamos el entvar "v_angle" el cual da a saber los angulos "de vista"
entity_set_int(IdDelPlayer, EV_INT_fixangles, 1) // Esto es requerido en los players al momento de cambiar sus angulos. Esto hara que para el proximo frame, se actualizen los nuevos angulos.

// Si es a una Entidad (<32)
entity_set_vector(IdDeLaEntidad, EV_VEC_angles, vecAngles) // Modificamos el entvar "angles" el cual da a saber los angulos ordinarios de una entidad comun, tanto como a un player.

Ahora estoy cansado, mañana continuo con esto.

 

Cualquier pregunta sera respondida, es un tema que manejo bien :D.

Editado por meTaLiCroSS
Publicado
Es tipo el multi manager? que activas cosas mediante tiempos , cuando queres?.

 

En el AMXx uno puede ejecutar funciones especificas en todo momento, a eso voy, es como "un prefab" el code que les estoy dando D:

Publicado
Muy bueno gracias por el tutorial, si te interesa el cartel de scripter avisame en perfil.
Publicado
Ta chulo :P

sopaquake-1.png

Pasa que swato caja tiene una coneccion clandestina con el verdulero de la esquina viste, y se bajo el OPERA!! EL O P E R A!!! !! EL O P E R A!! QUE NO SABE OPERAR las .PNG!!.

 

 

 

 

Es un foro, no un licuado de bananas, o una ensalada de frutas, como está, está bien.

 

la reputamadre que lo contrapario

 

[Hoy 16:09] Santi: y recibis mas info que mandando cumbia al 2020

[Hoy 16:08] Santi: te paso el cel del poola y el faqqu

[Hoy 16:08] Ezeh: se saben alguna pagina'

[Hoy 16:08] Ezeh: como saber de lo ultimo en cumbia de temas?

barwz.png

By S34Paint :D

 

 

Publicado

Disculpen mi ignorancia pero esto para que sirve? el titulo dice "manipulacion de vectores" pense q hablaban de la herramienta vertex.. pero nose..

 

Que sentido tiene?

para que se usa?

 

y no te olvides de mandarle un saludo de mi parte a tu prima

Publicado
Disculpame pero no me dijiste para que sirve.

 

Alguien que este de buen humor me dice?

 

Haber... empezemos de 0.

 

Este tutorial te esta mostrando un "metodo" para hacer lo ya señalado en un plugin de AMXx, ya sea para una entidad, un player, u otro uso cualquiera.

 

Leiste no?

Publicado
Pawn es C++ simplificado

sopaquake-1.png

Pasa que swato caja tiene una coneccion clandestina con el verdulero de la esquina viste, y se bajo el OPERA!! EL O P E R A!!! !! EL O P E R A!! QUE NO SABE OPERAR las .PNG!!.

 

 

 

 

Es un foro, no un licuado de bananas, o una ensalada de frutas, como está, está bien.

 

la reputamadre que lo contrapario

 

[Hoy 16:09] Santi: y recibis mas info que mandando cumbia al 2020

[Hoy 16:08] Santi: te paso el cel del poola y el faqqu

[Hoy 16:08] Ezeh: se saben alguna pagina'

[Hoy 16:08] Ezeh: como saber de lo ultimo en cumbia de temas?

barwz.png

By S34Paint :D

 

 

Crear una cuenta o conéctate para comentar

Tienes que ser miembro para dejar un comentario

Crear una cuenta

Regístrese para obtener una cuenta nueva en nuestra comunidad. ¡Es fácil!

Registrar una nueva cuenta

Conectar

¿Ya tienes una cuenta? Conéctate aquí.

Conectar ahora
×
×
  • Crear nuevo...

Información importante

Al utilizar nuestra web, aceptas nuestras Política de privacidad estás de acuerdo con las condiciones establecidas.