Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: NOKAUBURE en Julio 22, 2012, 09:31:42 PM

Título: Como calcular la posicion donde caera un objeto con velocidad, salto y gravedad
Publicado por: NOKAUBURE en Julio 22, 2012, 09:31:42 PM
Buenas, cuanto tiempo sin pasarme por aqui  :-[

Vengo a postear una duda que, posiblemente, no la llegue a contestar nadie  XD a no ser que hagan carrera matematica o algo.

Estoy haciendo un juego de plataformas. Pero los mobs tienen una IA avanzada. Por ahora consegui que:

- Te sigan a cierto alcanze
- Se paren si te fuiste lejos
- Si te subes en una plataforma, ellos saltan para subirla tambien
- Si saltas un vacio, ellos tambien lo saltan

Aqui mi problema: si ahora haces un acto suicida, por ejemplo, tirarte por un precipicio y gastar una vida extra, ellos se tiraran tambien, y a consecuencia de esto, mueren. Por lo que puedes llegar a matar un jefe solo suicidiandote xD y quiero arreglar esto de la siguiente manera:

Como hago para calcular la posicion donde caera un objeto, sabiendo su velocidad, salto y gravedad. De esta manera lograria que si en la posicion X, Y+1 calculada, hay un bloque, salten, sino, se quedan parados mirando como te caes en el vacio xD

Variables:

gravity = 0.8
velocidad = 6 (ojo, no es speed, es una variable que esta en el evento step tipo asi: x += velocidad)
vspeed (al saltar) = -7


PD: en un juego que hize, podia ajustar la velocidad para que cayera en una posicion X con gravedad y vspeed, pero haciendo una regla de 3 no me sirve :P
Título: Re:Como calcular la posicion donde caera un objeto con velocidad, salto y gravedad
Publicado por: Mr.Dudas en Julio 23, 2012, 12:55:48 AM
mmm...
no puedes crear un objecto invisible en ese lugar y hacer que cuando el jefe se colisione con el que pare o que salte?
Título: Re:Como calcular la posicion donde caera un objeto con velocidad, salto y gravedad
Publicado por: NOKAUBURE en Julio 23, 2012, 11:22:06 AM
Esa seria una solucion muy casera y tendria que estar en todos los mapas poniendo bloques invisibles en los vacios en los que "crea" que no pueden saltar. Igualmente ya descubri una manera de hacerlo, asi que cierren el tema  :) aun asi dejo la respuesta:


Como se desconoce la formula matematica, hay que hacer primero una prueba. Se crea un objeto que al iniciar la room, hace un salto de vspeed = -8 con gravity 0.8 y una velocidad que puedes escojer cada vez que le haces click izquierdo. Haciendo diferentes pruebas me da que con:

Velocidad | Distancia
1 | 21
2 | 42
3 | 63
4 | 84
5 | 105
6 | 126
Parece que incrementa 21 posiciones por cada 1 de velocidad que se le añade.
El codigo para ese trozo de IA quedaria asi:

If place_meeting(x+(velocidad*21),y+1,bloque) = true {jump();}


Estas IA dan su trabajo  :-X ya pueden cerrar post