Junio 13, 2017, 07:46:23 PM Ultima modificación: Junio 21, 2017, 11:36:31 AM por kostra
le pongo un path a un objeto en su create, en absolute, y pongo una velocidad dertical de 4, el objeto aparece donde el path absoluto y no obedece la orden del vspeed... Supongo, el absoluto es el que estorba aqui... ok, lo quito... pero me interesa que empiece en el centro y se mantenga en el centro ok... le pongo x = room_width/2; y pruebo... pum... ahora me sale igual, en el centro de la pantalla como si tuviera el absoluto!!

POR QUÉÉÉÉ!!!??? T_____T
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

Puedes explicar mejor lo que intentas hacer?
Y si es posible una imagen o algo así ilustrativa

una cuchilla giratoria que sigue un path que empieza en el centro X, desde arriba moviéndose para abajo hasta salir del mapa por abajo.
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

Ohh, lo que debes hacer es con unas variables indicar el centro del movimiento y no usar las formas normal de los paths. Si no obtener con path_get_x();

algo así:

x = centro_x + path_get_x(path, i);
y = centro_y + path_get_y(path, i);

centro_y += v_speed;

Te dejo un adjunto con un ejemplo

parece que es buena tu respuesta pero me falla con el hecho de que uso de path un circuito cerrado siempre y el script que me pasaste parece que cambia de sentido al llegar al final y al volver lo mismo, pero no entiendo cómo cambiar eso, he probado tocar parametros de lo del sentido
[gml]if pos_path >= 1{sentido = false;}//Si llego al fin, que cambie el sentido
if pos_path <= 0{sentido = false;}//Si llego al principio, lo mismo[/gml]
pero se estropea aun más :S

otra cosa que viene dentro de este problema, es que he de convinar eso con dibujar el mismo path también moviéndose para abajo.
lo hablo en este post: http://www.comunidadgm.org/preguntas-y-respuestas/dibujar-linea-con-path/

[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

En lugar del código donde se comprueba el sentido, debes colocarlo siguiente (no recuerdo si esos eran los nombres de las variables)

if pos_path >= 1{ pos_path = 0; }

Para tener un path que se mueve, utilizo este método:

Evento Create
[gml]
/// Iniciar

xx = x; //origen de la path en room
yy = y;

path_start( path0,2, 2,false );
// iniciar path0
// con velocidad 2
// continua al llegar al final
// posicion relativa a la instancia
[/gml]

Evento Step
[gml]
/// Mover path

p = path_position; //guardar posicion dentro de la path
path_end(); //terminar path para mover la instancia

//mover origen de la path
xx += (keyboard_check(vk_right)-keyboard_check(vk_left))*4;
yy += (keyboard_check(vk_down)-keyboard_check(vk_up))*4;

x = xx; //mover instancia al origen de la path
y = yy;

path_start( path0,2, 2,false ); //iniciar path otra vez
path_position = p; //en la posicion que se habia quedado
[/gml]

Alex, ya conseguí el movimiento, ahora falta dibujarlo también bajando el mismo path xD

clamud, tu codigo no me sale (sí, cambié bien path0, los dos que hay xD)
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

Yo uso el siguiente codigo para dibujar los paths que tienen movimiento:


//Dibujado del path
for(var i = 0; i < path_get_number(path_0); i++){
    //Se extrae el punto actual
    px_1 = path_get_point_x(path_0, i);
    py_1 = path_get_point_y(path_0, i);
    //Se extrae el punto siguiente
    px_2 = path_get_point_x(path_0, i + 1);
    py_2 = path_get_point_y(path_0, i + 1);
    //Si el segundo punto existe
    if px_2 != 0{
        //Dibujar las lineas en base al centro
        draw_line_width(centro_x + px_1, centro_y + py_1, centro_x + px_2, centro_y + py_2, ancho_linea);
    }
}
//Dibujado de la cuchilla
draw_self();


Adicional dejo un .gmz para que veas el funcionamiento

#9 Junio 19, 2017, 09:40:13 PM Ultima modificación: Junio 19, 2017, 09:49:40 PM por kostra
vale me he liado un poco pero ya ha mejorado considerablemente, ahora baja bien, siguie bien el path PERO, me sale la x muy a la derecha, lo quisiera en el centro de la room, ya que los paths que uso empiezan en el centro.

Tengo esto..
create:
[gml]///init

path = choose(pcuchillamovil0,pcuchillamovil1,pcuchillamovil2,
pcuchillamovil3,pcuchillamovil4,pcuchillamovil5,pcuchillamovil6,
pcuchillamovil7,pcuchillamovil8,pcuchillamovil9);

pos_path = 0;
ancho_linea = 3;

centro_x = x;
centro_y = y;

v_path = 0.005;
v_speed = 4;[/gml]

step:
[gml]///mover cuchilla

if pos_path >= 1{ pos_path = 0;}
pos_path += v_path;

x = centro_x + path_get_x(path, pos_path);
y = centro_y + path_get_y(path, pos_path);

centro_y += v_speed;[/gml]

draw:
[gml]///dibujar path

for(var i = 0; i < path_get_number(path); i++){
    px_1 = path_get_point_x(path, i);
    py_1 = path_get_point_y(path, i);
    px_2 = path_get_point_x(path, i + 1);
    py_2 = path_get_point_y(path, i + 1)
   
    if px_2 != 0
        draw_line_width(centro_x + px_1, centro_y + py_1, centro_x + px_2, centro_y + py_2, ancho_linea);
    }

draw_self();[/gml]

Igual, mientras espero respuesta aqui ando tratando de hacerlo yop :B
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

Si en el editor de paths, tienes los paths hechos para que estén justamente en el centro del cuarto, solo modifica lo siguiente:


//Le quite "centro_x" a las partes donde se coloca las "X".

//Movimiento
x = path_get_x(path, pos_path);

//Dibujado
if px_2 != 0{
    draw_line_width(px_1, centro_y + py_1, px_2, centro_y + py_2, ancho_linea);
}

El único cambio fue, BORRAR del draw_line, todos los "centro_x" y sus respectivos "+" así como lo tienes tú, el código quedó así:
[gml]///dbujar path

for(var i = 0; i < path_get_number(path); i++){
    px_1 = path_get_point_x(path, i);
    py_1 = path_get_point_y(path, i);
    px_2 = path_get_point_x(path, i + 1);
    py_2 = path_get_point_y(path, i + 1)
   
    if px_2 != 0
        draw_line_width(px_1, centro_y + py_1, px_2, centro_y + py_2, ancho_linea);
    }

draw_self();[/gml]

y hay dos errores
1- dibuja el path incompleto
2- la cuchilla sigue el path pero sigue yendo por la derecha..

imagen orientativa:
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

#12 Junio 20, 2017, 05:26:17 PM Ultima modificación: Junio 20, 2017, 08:33:57 PM por Alesxanderk
La cuchilla esta más a la derecha, por que no eliminaste el "centro_x + " del Event Step.

//Movimiento de la cuchilla
x = path_get_x(path, pos_path);


No me di cuenta que el path no se dibujaba cerrado  XD , de la siguiente forma debería de servir.

///dbujar path

for(var i = 0; i < path_get_number(path); i++){

    px_1 = path_get_point_x(path, i);
    py_1 = path_get_point_y(path, i);
    px_2 = path_get_point_x(path, i + 1);
    py_2 = path_get_point_y(path, i + 1);
   
    //Si el segundo punto no existe, que tome el primer punto de todo el path.
    if px_2 == 0{
        px_2 = path_get_point_x(path, 0);
        py_2 = path_get_point_y(path, 0);
    }

    draw_line_width(px_1, centro_y + py_1, px_2, centro_y + py_2, ancho_linea);
}


Editado, según yo solo faltaba un "}"

ahora siempre me dibuja una sola linea, en tu codigo falta un }  lo he puesto en los dos sitios posibles que podrían faltar
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

Edité el mensaje anterior, también lo probé y está todo bien.