Hola, como ustedes saben, el codigo de point_direction
[gml] point_direction(x1, y1, x2, y2); [/gml]
Pero en la mayoria de info en google, encuentro ejemplos como estos:
[gml] point_direction(x, y, enemigo.x, enemigo.y);
// con mouse
point_direction(x, y, mouse_x, mouse_y)
[/gml]
He aqui mi dificultad, mi juego es de plataformas y no uso mouse, ya que el personaje se mueve de derecha a izquierda, salta,
¿Que puedo colocar en "x2, y2" para que haga caso al movimiento horizontal, y vertical?
Este codigo es con el fin de posicionar la bala de un arma ?
Espero enormemente sus respuestas
No he acabado de entender bien tu problema, pero me parece que no necesitas utilizar point_direction(). Si el jugador sólo se mueve hacia la derecha e izquierda (y verticalmente), entonces utiliza una variable que tenga la dirección 1 o -1 dependiendo de hacia dónde va.
[gml]
///Al presionar la tecla izquierda
image_xscale = -1;
[/gml]
[gml]
///Al presionar la tecla derecha
image_xscale = 1;
[/gml][gml]
///Al disparar
( instance_create(x, y, objBala) ).speed = 5 * image_xscale;
[/gml]
Usé image_xscale, pero si utilizas sprites distintos para izquerda y derecha entonces tendrás que usar una variable propia.
Gracias por responder este tema, como referencia tome estos videos, puedes revisarlo:
https://www.youtube.com/watch?v=Y7cfxoYSB_A&list=PLiplYDjUMtthKOauoGbgO4fk4_n7tlbZ8&index=2
el mas importante
https://www.youtube.com/watch?v=DsdlR26gHOs&list=PLiplYDjUMtthKOauoGbgO4fk4_n7tlbZ8&index=5
ahora aqui esta el script:
---- variables ------
[gml]
vv = 0
vh = 0
dir = point_direction(x,y,mouse_x,mouse_y)
dis = point_distance(x,y,mouse_x,mouse_y) [/gml]
----- movimiento -------
[gml] // movimiento
if (keyboard_check(ord('W'))) vv -= v;
if (keyboard_check(ord('A'))) vh -= v;
if (keyboard_check(ord('S'))) vv += v;
if (keyboard_check(ord('D'))) vh += v
[/gml]
------ giro de la bala hacia la punta de la pistola ------
[gml] if (instance_exists(obj_jugador)){
x= obj_jugador.x + obj_jugador.vh + lengthdir_x(60,obj_jugador.dir-5)
y = obj_jugador.y + obj_jugador.vv + lengthdir_y(60,obj_jugador.dir-5)
} [/gml]
Como dije, mi juego es de plataformas y el personaje se mueve como mario bros, pero mi duda esta aqui, tengo el sprite del arma, ahora aqui solo me faltaria agregar la bala. Para ello necesito que la bala salga de la punta del arma, y mi juego como te repito no usa mouse, sino teclas con 3 direcciones, "right", "left", "up" ---
Hay demasiado código. Si sólo usas las direcciones de arriba, izquierda y derecha no necesitas usar lengthdir_x/y(). Podrías hacer algo como esto:
[gml]
///Evento create
dir = 0; ///Dirección. 0: ninguna, 1: derecha, -1: izquierda, 2: arriba.
[/gml]
[gml]
///Evento step
var hd = keyboard_check(vk_right) - keyboard_check(vk_left);
var vd = keyboard_check(vk_up);
if(abs(hd))
dir = hd;
else if(vd)
dir = 2;
else
dir = 0;
[/gml]
[gml]
///Cuando necesites crear la bala
if(abs(dir) == 1) //Si se debe crear horizontalmente
( instance_create(x + 60 * dir, y, objBala) ).hspeed = 5 * dir; //Modifica los valores 60 y 5 según necesites.
else if(dir == 2)
( instance_create(x, y - 60, objBala ).vspeed = -5; //También modifica a gusto.
[/gml]