Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: the_blade en Noviembre 02, 2011, 12:37:10 PM

Título: Disparo en ocho direcciones
Publicado por: the_blade en Noviembre 02, 2011, 12:37:10 PM
consulta me encuentro desarrollando shooter isometrico en tercera persona 2d, controlado por el teclado para moverse (teclas A,S,D y W) y mouse para mover la mira y darle la direccion al personaje, ahora me surgio un problema utilizando instance create al momento de hacer un click con el mouse en alguna direccion, dado que tendria que lanzar un objeto bala en esa direccion, y si bien lo hace, la misma esta saliendo de una direccion que no deseo, como hago para hacer que salga exactamente de la punta del sprite arma, osea del ca?on, y que en todas las direcciones funcione, porque me a pasado que asigno una direccion y para un lado me sale bien pero para los otros no. gracias
Título: Re: Disparo en ocho direcciones
Publicado por: elviskelley en Noviembre 02, 2011, 02:42:24 PM
la fomar mas facil es crear una variable dirb la cual usaras luego con un switch(dirb) para indicar la posicion x , y a crear la bala.
Título: Re: Disparo en ocho direcciones
Publicado por: NOKAUBURE en Noviembre 02, 2011, 04:00:43 PM
Haber, para disparar una bala donde haces click, en el evento create de la bala deberias poner:

[gml]direction = point_direction(x,y,mouse_x,mouse_y)
speed = 20[/gml]

Para que salgan las balas en la punta de la pistola, bueno, supongo que la pistola es una instancia a parte.... si el center point esta en el mango (que es lo normal), solo debes ajustar la bala a una posicion relativa al crearla
Título: Re: Disparo en ocho direcciones
Publicado por: knd144 en Noviembre 02, 2011, 09:48:41 PM
Quieres que funcione solo en 8 direcciones, ?Verdad?
Para que se vaya a la direcci?n dependiendo del angulo personaje - mouse puedes usar ?ste c?digo en el create de la bala:

[gml]
direccion = round(point_direction(obj_personaje.x,obj_personaje.y,mouse_x,mouse_y)/45);
direccion *=45;
direction = direccion;
[/gml]
Eso le da a la bala una de las 8 direcciones posibles m?s cercanas al mouse.

Para que aparesca en la punta de la pistola hace falta hacer uso de funciones trigonom?tricas:

[gml]//Hacemos el m?smo c?lculo que el anterior para saber la direcci?n:
direccion = round(point_direction(obj_personaje.x,obj_personaje.y,mouse_x,mouse_y)/45);
direccion *=45;

//Vale, ahora necesitamos saber a qu? distancia est? el centro del sprite del personaje y la punta del ca??n, esto lo guardamos en una variable distancia.
//Y hacemos el siguiente c?lculo:
var xx,yy;
xx= distancia*cos(degtorad(direccion));
yy= distancia*sin(degtorad(direccion));

//y a la hora de crear la bala, se crea en las siguientes coordenadas:

instance_create(obj_personaje.x+xx.obj_personaje.y-yy,bala);
[/gml]

mmm... creo que esos ser?an los c?lculos que debes hacer  :-[