Hola gente como andan? Me presento, Mi nombre es Emiliano y tengo la siguiente duda....
Resulta que quiero lograr este efecto que veran en la imagen, perdon que se vea chica (pueden mirar un video de ammo roar o super big gun adventure para entender mejor) , pero el concepto es este, quiero lograr que el personaje al disparar, salga con impulso a la direccion contraria a la que esta disparando, se entiende? ya logre hacer que el personaje dispare y que la pistola mire para donde apunta el mouse, pero no se como hacer para que cada vez que dispare (efecto ametralladora) salga con impulso a la direccion contraria a la que esta disparando, tengo hecho el siguiente codigo en los objetos
(GAME MAKER STUDIO 1.4)
evento step del jugador
/// Controlar velocidad de movimiento
vv = 0;
vh = 0;
v = 30;
if (keyboard_check(ord('W'))) vv = -v; image_index=sprite2
if (keyboard_check(ord('S'))) vv = v; image_index=spr_jugador1
if (keyboard_check(ord('A'))) vh = -v;image_index=sprite2
if (keyboard_check(ord('D'))) vh = v;image_index=spr_jugador1
if (keyboard_check(vk_up)) vv = -1000;
if (keyboard_check(vk_down)) vv = 1000;
if (keyboard_check(vk_left)) vh = -1000;
if (keyboard_check(vk_right)) vh = 1000;
//cambio de sprite del personaje
if x < mouse_x
sprite_index = spr_jugador1
else
sprite_index = sprite2
/// Procesar movimiento
pm = place_meeting(x+vh,y+vv,obj_pared);
cl = collision_line(x,y,x+vh,y+vv,obj_pared,false,false);
if (pm or cl) {
// Comprobando colisión horizontal
for(var i=0;i<abs(vh);i++){
if (place_meeting(x+sign(vh),y,obj_pared)) then break;
x += sign(vh);
}
// Comprobando colisión vertical
for(var i=0;i<abs(vv);i++){
if (place_meeting(x,y+sign(vv),obj_pared)) then break;
y += sign(vv);
}
vh = 0;
vv = 0;
}
hspeed = vh;
vspeed = vv;
Objeto Arma
Evento Step
dir = point_direction(obj_jugador.x, obj_jugador.y, mouse_x, mouse_y);
image_angle= dir
if obj_jugador.x < mouse_x {
image_yscale=+1
x=obj_jugador.x +15
y=obj_jugador.y +15
}
else{
image_yscale= -1
x=obj_jugador.x -15
y=obj_jugador.y +15
}
Evento Glob left button
var xp, yp;
xp=x+10*cos(degtorad(image_angle))
yp=y-10*sin(degtorad(image_angle))
bob = instance_create(xp,yp,obj_bala2)
bob .speed=15
bob .direction=image_angle
bob .image_angle=image_angle
Espero puedan ayudarme, gracias y un abrazo a todos!!
Si bien solo le he dado una mirada muy rápida a tu código. Entiendo que quieres que al disparar el personaje retroceda.
Para ello yo te diría que uses una variable un alarma.Ejemplo:
if click derecho
{Empuje = true
if mouse_X > personaje
{desplazar 3 pixeles a la izquierda}
if mouse_X < personaje
{desplazar 3 pixeles a la derecha}}
else
{Empuje = false}
if Empuje = false
{f (keyboard_check(ord('A'))) vh = -v;
if (keyboard_check(ord('D'))) vh = v;}
if Empujar = true
{alarm[0] = 3}
//En la alarma
Empujar = false
Con esto tendrías que poder notarse el efecto de empujar al jugador cuando dispara sin problemas.
Pero OJO este sistema inpide que mientras aprietes el boton de disparar el jugador se pueda mover a voluntad.