Hola buenas, necesito crear un obj_linea; que al tocar en la pantalla deslices y valla dibujando la linea.
he probado con el draw_line_width(MouseXStart, MouseYStart, MouseX, MouseY,6;  pero me gustaria mejorarlo, como por ejemplo, hacer que al pinchar dibujes a mano alzada, pero cuando sueltas esa linea(mal dibujada) se corrige y se crea recta. Y tambien limitarle la longitud por ejemplo solo 200px, por mucho que deslice.
Muchas gracias!!

Si al final sera una linea es mejor hacer una linea desde el principio.
CREATE
[gml]
x1=x
y1=y
x2=x
y2=y
dibujar=true
[/gml]
STEP
[gml]
if mouse_check_button_released(mb_left) {dibujar=false}

if (mouse_check_button(mb_left) and dibujar=true)
  {
   ang=point_direction(x1,y1,mouse_x,mouse_y)
   x2=median(x1, mouse_x, x1+lengthdir_x(200,ang))
   y2=median(y1, mouse_y, y1+lengthdir_y(200,ang))
  }
[/gml]
DRAW
[gml]
draw_line_width(x1,y1,x2,y2,6)
[/gml]

Cuando se presiona con el raton, desde otro objeto se crea el objeto que dibujara la linea con el codigo de arriba.
x1 y1 sera la posicion de inicio, y x2 y2 seran la posicion final mientras se mantenga presionado el boton del raton (controlado por la variable dibujar)
El largo de la linea estara dado por el valor medio entre 3 valores, la posicion inicial (x1 y1), el cursor (mouse_x mouse_y) y el valor 200 pixels (que se dara usando la posicion inicial mas lengthdir_x, lengthdir_y y ang)

Si ya consegui crearla a mi gusto, pero no consigo ahora poder darle funciones a esa linea. Me gustaria que una vez que esta dibujada la linea se convierta por asi decir en un objeto solido, que ya puedas añadirles funciones de colision etc...

Cita de: peludo en Octubre 04, 2018, 08:32:34 PM
Si ya consegui crearla a mi gusto, pero no consigo ahora poder darle funciones a esa linea. Me gustaria que una vez que esta dibujada la linea se convierta por asi decir en un objeto solido, que ya puedas añadirles funciones de colision etc...
Yo habeses creo Objetos invisibles y con la variable "visible true" vuelve a ser visibles cuando yo lo desee, sospecho que lo mismo ocurriria si colocas un boton que comvierta el "solid false;" en "true"

Si, pero eso no es la solución.Puede que me haya explicado mal;
Tengo un obj_swipe sin SPRITE, que lo utilizo como el controlador de dibujar la linea.
CREATE

///variables
MouseX = 0;
MouseY = 0;
MouseXStart = 0;
MouseYStart = 0;

Swipe = false;
linea = true;


STEP

if (device_mouse_check_button_pressed(0, mb_left))
    {
    Swipe = true;
    MouseXStart = mouse_x;
    MouseYStart = mouse_y;
   
    //instance_create(MouseXStart,MouseYStart,o_static)
    }

if (Swipe = true)
{
MouseX = mouse_x;
MouseY = mouse_y;
ang=point_direction(MouseXStart,MouseYStart,mouse_x,mouse_y)
MouseX=median(MouseXStart, mouse_x, MouseXStart+lengthdir_x(200,ang))
MouseY=median(MouseYStart, mouse_y, MouseYStart+lengthdir_y(200,ang))
solid = true

    if (device_mouse_check_button_released(0, mb_left))
    {
    Swipe = false;
    //instance_create(MouseX,MouseY,obj_Bat)
    //instance_create(x,y,obj_bridge)
    linea = false;
    }
}
linea = true

DRAW

if linea == true
{
edgeds_draw_sprite(0,0,x,y,0,c_white,0,3,true,1,1);
draw_set_colour(c_black);
draw_line_width(MouseXStart, MouseYStart, MouseX, MouseY,6);
draw_set_halign(fa_left);
draw_set_valign(fa_center);
}


Asi seria mi codigo del objeto, entoces claro una vez que dibujo la linea, no puedo hacer nada con ella(no es un obj), ya que me gustaria que en otro objeto por ejemplo una bola, dija cuando colision con la LINEA haga que rebote....

Adjunto un ejemplo, tal vez te sirve. Usa WASD para mover el círculo y el botón izquierdo del ratón para dibujar líneas.
El código es algo complicado y no está bien comentado.
Una forma más fácil de hacer lo mismo es utilizar física (physics_fixture_set_edge_shape, physics_fixture_set_chain_shape)

Podes usar un sprite de 1 pixel de ancho y 6 de alto para hacer la linea.
Ya sabes como obtener la longuitud(point_distance) y el angulo entre el punto inicial y final(point_direction).
Usas la distancia para escalar el sprite(image_xscale) y el angulo para girar el sprite(image_angle) y ya tenes la linea con mascara de colision.
Asegurate que las propiedades del sprite tenga la mascara colision precisa y automatica.

Es difícil encontrar un trabajo.