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

#1 Noviembre 02, 2011, 02:42:24 PM Ultima modificación: Noviembre 02, 2011, 02:49:32 PM por elviskelley
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.

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
Noka siempre responde a los temas con 0 respuestas ^^

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  :-[