Noticias

¡Ayuda a la Comunidad GM, haz una donación!

* Sponsor

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Duda sobre "X Y" y "Direction"  (Leído 605 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado T789

en: Agosto 18, 2020, 07:02:38 pm
Hola Makeros, como ya vieron en el titulo, tengo algunas dudas sobre el uso de las posiciones X e Y y la direction

Mi Razonamiento Basico:
Cuando hago un juego, uso las posiciones X e Y paras darle movimiento a mi personaje y a cualquier otro de forma horizontal y vertical. Ya que usar hspeed = 4 en un evento create es lo mismo que sumar 4 a X en el evento step
/// Evento Create
hspeed = 4 //derecha
vspeed = -4 //izquierda

/// Evento Step
x += 4 //derecha
x -= 4 //izquierda
y += 4 //abajo
y -= 4 //arriba
Todos conocemos que al sumarle 4 seria positivo y eso indica a la derecha y restarle es negativo a la izquierda

De esa forma le doy movimiento a mi persona o a cualquier otro. Con la direction tambien entiendo el movimiento
// 0/360 = derecha, 90 = arriba, 180 = izquierda, 270 = abajo
direction = 270;
speed = 4;
Las 2 formas son realmente buenas para dar movimiento en general pero cuando hago un proyecto, solo me enfoco en una a la hora de programar para no confundirme con sus significados

Hay veces que veo algunos codigos que emplean ambos metodos y suelo entenderlos un poco por la forma en que lo usan. Por ejemplo el siguiente codigo es para rotar un objeto:
direction += 4;
x = obj_sphere.x + lengthdir_x(64, direction)
y = obj_sphere.y + lengthdir_y(64, direction)
Pero me confunde... Ya entiendo para que pero no el como, la funcion lengthdir_ te devuelve el angulo y la longitud a la que asignar la X o Y dependiendo de las propiedades, pero mi concepto no me deja entender muy bien la logica

Otro ejemplo es el de crear la bala segun la direction
/// Event Step obj_player
if (keyshoot && ammo > 0)  {
   with(instance_create(x, y, obj_bullet) ) {
      direction = image_angle;
      speed = 7;
   }

/// Event Create obj_bullet
x = x + (2*hspeed);
y = y + (2*vspeed);
La parte de la bala me confunde un poco; tambien hay otros ejemplos en juegos 3D que he visto y que no entiendo

Seria mas facil poner lengthdir_ en vez de eso y ya lo he hecho. Normalmente no le prestaria mucha atencion a eso y simplemente seguiria haciendo lo que llevo pero muy seguido he intentado hacer un 3D ligero y al llegar a la parte en la que me topo con alguna X sumandole una direction y..., en fin, hay mas dudas que resaltaria pero me tardaria mucho mas, asi que lo dejare hasta ahi

Disculpa si no se entendieron mis ejemplos o si las dudas no quedaron claras

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado bygdle

  • Flota de Justicia Particular.
  • Moderadores globales
  • Okupa
  • *
  • Puntos: 2848
  • Mensajes: 1.715
  • Agradecido: 152 veces
  • Sexo: Masculino
  • Thomas the dank engine.
    • Ver Perfil
Respuesta #1 en: Agosto 18, 2020, 08:04:46 pm
1. direction y speed son la dirección y magnitud del vector velocidad, respectivamente, y hspeed/vspeed son sus componentes. Además, el signo de speed representa el sentido del vector.

2. Las funciones lengthdir_x(d, r) y lengthdir_y(d, r) son simplificaciones de las funciones trigonométricas, así:
lengthdir_x(d, r) == d*dcos(r);
lengthdir_y(d, r) == -d*dsin(r);
(dcos() y dsin() son equivalentes a cos() y sin(), con la diferencia de que reciben el ángulo en grados y no en radianes.)

La razón por la que se multiplica la función sin() por -1 es que el eje vertical en las computadoras está invertido (los positivos "bajan") respecto a como se representa normalmente en un plano cartesiano (los positivos "suben").
no me abras pls


3. Este código:
/// Event Create obj_bullet
x = x + (2*hspeed);
y = y + (2*vspeed);
Lo que hace es evitar que la bala "empiece a moverse" desde la misma ubicación que el jugador, con esa suma lo que se hace es posicionar de inmediato la bala a donde debería estar dentro de dos steps (adelantar el tiempo... (?)... ), considerando la velocidad que lleva.

alaberga regué el café.

BA:STFW&RTFM
 
Los siguientes usuarios dieron las gracias a este tema: getnoff


Desconectado T789

Respuesta #2 en: Agosto 18, 2020, 08:35:31 pm
Buena mi entendimiento sobre la direction,speed,hspeed,vspeed han cambiado un poco, aunque ya entendi bien el funcionamiento de esos codigos

Creo que me urge enserio repasar las clases de matematicas  :-[

Otra duda es que cuando se crea la bala y se le aplica la direction y la speed, ¿eso hace que los componentes que son hspeed y vspeed se adapten segun... La direcion y magnitud del vector?

 


Desconectado bygdle

  • Flota de Justicia Particular.
  • Moderadores globales
  • Okupa
  • *
  • Puntos: 2848
  • Mensajes: 1.715
  • Agradecido: 152 veces
  • Sexo: Masculino
  • Thomas the dank engine.
    • Ver Perfil
Respuesta #3 en: Agosto 18, 2020, 09:00:35 pm
¿eso hace que los componentes que son hspeed y vspeed se adapten segun... La direcion y magnitud del vector?
Sí, y viceversa. Las cuatro variables de velocidad se mantienen sincronizadas entre sí, cambias una y las otras tres se adaptan automáticamente.



Aunque ahora que lo mencionas, este código que pusiste no debería funcionar, porque el evento Create se ejecuta antes que lo del with, de modo que estarías moviendo la instancia antes de definir su velocidad.
 
/// Event Step obj_player
if (keyshoot && ammo > 0)  {
   with(instance_create(x, y, obj_bullet) ) {
      direction = image_angle;
      speed = 7;
   }

/// Event Create obj_bullet
x = x + (2*hspeed);
y = y + (2*vspeed);

alaberga regué el café.

BA:STFW&RTFM
 


Desconectado T789

Respuesta #4 en: Agosto 18, 2020, 09:04:32 pm
Gracias por resolver mis dudad y tienes razon, normalmente con codigos asi, suelo establecer una alarma de admenos 1 para que se carguen las variables de with pero como es una bala directa... Creo que habria que pulir el codigo un poco

 


Desconectado Walle21

  • Visitante
  • *
  • Puntos: 1
  • Mensajes: 1
  • Sexo: Masculino
    • Ver Perfil
    • Seoplanner
Respuesta #5 en: Agosto 21, 2020, 06:59:26 pm
Hola, la verdad es que yo tenia la misma duda que tu tenias y pues muchas gracias por hacer la pregunta que tenia que hacer yo.. Y que no hice por miedo a que me tildaran de bobo!

Sigue así y quiero que sepan a todas esas personas que nos han ayudado que son exclentes personas y que sigan asi porque van por un buen camino!!  :P :P