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
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.
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/
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)
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
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
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:
(https://i.gyazo.com/c2fb6e879c1f944feaf4501e52f0cb34.png)
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
Edité el mensaje anterior, también lo probé y está todo bien.
ultra resuelto jeje, muchisimas gracias, alomejor en un futuro le daré más vueltas a esto y abriré más posts, pero por el momento, soy feliz para poder liberar una alpha para vosotros jiji