(https://i.gyazo.com/56b174f7b2241bd9ea5eb61c2afefa61.gif)
Bueno al parecer se mueve con un orden ya establecido, un "paths", pero va dejando clones que se van creando, estos se van destruyendo a un paso de igual velocidad por lo que siempre habrá una misma cantidad de bloques, cave mencionar que toque un tema parecido a este, pero en 3 días nadie respondió, no hay que negar que parece una mecánica simple que da grandes posibilidades
¿Alguien ha programado algo como esto o sabe como programarlo?
Por otro lado he armado un código y 2 objetos, pero no funciona. :-\
Puedes utilizar un path en un solo objeto que vaya creando otro y ese otro desaparezca cada cierto tiempo.
Adjunto un ejemplo basico de como hacerlo.
Cita de: desplo en Noviembre 13, 2017, 04:41:59 AM
Puedes utilizar un path en un solo objeto que vaya creando otro y ese otro desaparezca cada cierto tiempo.
Adjunto un ejemplo basico de como hacerlo.
(https://i.gyazo.com/192749a779cb79db1906ff6e39982d30.gif)
En base a tu ejemplo he estado analizando cada una de sus partes, por lo que tengo lo siguiente.
obj_Bloque_Creador
CREATE
///Patron
global.patron = path_add();
//Coordenadas
path_add_point(global.patron,50,50,room_speed);
path_add_point(global.patron,500,50,room_speed);
path_add_point(global.patron,500,400,room_speed);
path_add_point(global.patron,500,400,room_speed);
path_add_point(global.patron,1000,400,room_speed);
path_add_point(global.patron,1000,900,room_speed);
path_add_point(global.patron,1500,900,room_speed);
//Detener movimiento
path_set_closed(global.patron,false);
path_start(global.patron,room_speed/path_get_number(global.patron)*2,path_action_stop,1);
//Crear otro bloque
alarm[0] = room_speed
instance_create(0,0,obj_Bloque_Creado);
ALARMA0
///Crear clon
instance_create(x,y,obj_Bloque_Creado);
alarm[0] = room_speed;
DRAW
///Dibujar lineas de movimiento
draw_self()
draw_path(global.patron,x,y,1);
obj_Bloque_Creado
CREATE
///Duracion del bloque
alarm[0] = room_speed*2; //Empezara a desaparecer
ALARM0
///Informacion del clon
if image_alpha > 0 {
image_alpha-=0.005; //Velocidad de desaparicion
}else{
instance_destroy(); //Destruir
}
alarm[0] = 1; //Crear otro
STEP ¿porque hay un step sin código?
¿Que tendría que quitar y agregar al objeto para que haya distintos patrones?
Evidentemente el "creation code" podría servir para eso, tal vez debo quitarles las coordenadas al objeto y ponerlas en el "creation code"de cada uno, aunque eso puede dar un error por la falta de coordenadas del objeto principal.
si quieres profundizar mas en esto, deberias de crear el juego de la culebrita primero, ya que es bastante similar a lo que necesitas, por si luego quieres tener mayor control, o cambiar el comportamiento de como se mueven los bloques ya sea deteniendolo.
A que te refieres con "Distintos patrones"?
La razón por la que los bloques dejan un espacio entre si es porque cambiaste la velocidad del path y en ese caso tambien tendrias que cambiar la velocidad del alarm en donde se creara el nuevo bloque.
Con respecto al STEP puedes eliminar, solamente estaba haciendo unas pruebas y se me olvido eliminarlo.
Yo lo haria con 3 objetos, caveza, cuerpo y cola.
- La caveza se moveria usando un path (path_start) he iria creando objetos cuerpo cuando se alinee con la grid (place_snapped), ademas que crearia al inicio la cola.
- El cuerpo estaria quieto sin hacer nada.
- La cola se empezaria a mover cierto tiempo despues usando una alarma y usaria el mismo path, igual que la caveza. Ademas cuando se encuentre en la misma posicion que un objeto cuerpo, lo elimina.
Dejo un ejecutable para que se pueda ver.
(https://i.imgur.com/FOOgtw5.png)
Cita de: desplo en Noviembre 13, 2017, 11:18:10 PM
A que te refieres con "Distintos patrones"?
La razón por la que los bloques dejan un espacio entre si es porque cambiaste la velocidad del path y en ese caso tambien tendrias que cambiar la velocidad del alarm en donde se creara el nuevo bloque.
Con respecto al STEP puedes eliminar, solamente estaba haciendo unas pruebas y se me olvido eliminarlo.
Me refería a que las coordenadas sean establecidas con el "creation code", es decir que con un solo objeto pueda creear varios patrones de movimiento en cada objeto de la "room", el problema es que si le quito las coordenadas y se las pego al "creation code" del objeto en la "room", tendría error.
Cita de: somnus en Noviembre 13, 2017, 05:23:53 PM
si quieres profundizar mas en esto, deberias de crear el juego de la culebrita primero, ya que es bastante similar a lo que necesitas, por si luego quieres tener mayor control, o cambiar el comportamiento de como se mueven los bloques ya sea deteniendolo.
Creo que te refieres al "snake" que come bolas y crece, la verdad ya lo tengo incluido como un mini-juego gracias al tutorial de "escuela de video juegos", de hecho pensé en una mecánica en que controlas a 2 jugadores al mismo tiempo con comportamientos variados y dependientes, pero eso es ajeno a este tema :-\.
Cita de: 3dgeminis en Noviembre 14, 2017, 03:31:10 AM
Yo lo haria con 3 objetos, caveza, cuerpo y cola.
- La caveza se moveria usando un path (path_start) he iria creando objetos cuerpo cuando se alinee con la grid (place_snapped), ademas que crearia al inicio la cola.
- El cuerpo estaria quieto sin hacer nada.
- La cola se empezaria a mover cierto tiempo despues usando una alarma y usaria el mismo path, igual que la caveza. Ademas cuando se encuentre en la misma posicion que un objeto cuerpo, lo elimina.
Dejo un ejecutable para que se pueda ver.
(https://i.imgur.com/FOOgtw5.png)
Debo admitir que el funcionamiento de esos 3 objetos generan un comportamiento tan perfecto a la vista que es un deleite verlo en escena :D, seria genial tenerlo si no fuera porque el código anterior logra el mismo resultado en términos de mecánica, claramente no visuales porque el mio desaparece en vez de comerse el bloque, aunque me gusta como se ve a la vista :), 2 objetos que hacen el funcionamiento de 3 parece una opción mas rentable, ademas tendría que ver como programo lo que has hecho, parece simple de entender, en base a lo que he visto en tu ejecutable y lo que explicas en un breve resumen, pero seguro acabo metiéndome en problemas, no creo que tenga un código mas simplificado como estos 2 objetos.
obj_Bloque_Creador
CREATE
///Patron
global.patron = path_add();
//Coordenadas
path_add_point(global.patron,50,50,room_speed);
path_add_point(global.patron,500,50,room_speed);
path_add_point(global.patron,500,400,room_speed);
path_add_point(global.patron,500,400,room_speed);
path_add_point(global.patron,1000,400,room_speed);
path_add_point(global.patron,1000,900,room_speed);
path_add_point(global.patron,1500,900,room_speed);
//Detener movimiento
path_set_closed(global.patron,false);
path_start(global.patron,room_speed/path_get_number(global.patron)*2,path_action_stop,1);
//Crear otro bloque
alarm[0] = room_speed
instance_create(0,0,obj_Bloque_Creado);
ALARMA0
///Crear clon
instance_create(x,y,obj_Bloque_Creado);
alarm[0] = room_speed;
DRAW
///Dibujar lineas de movimiento
draw_self()
draw_path(global.patron,x,y,1);
obj_Bloque_Creado
CREATE
///Duracion del bloque
alarm[0] = room_speed*2; //Empezara a desaparecer
ALARM0
///Informacion del clon
if image_alpha > 0 {
image_alpha-=0.005; //Velocidad de desaparicion
}else{
instance_destroy(); //Destruir
}
alarm[0] = 1; //Crear otro
Claramente funcionan como pudo ver en la imagen de arriba, claro que debo hacerles unos arreglos de velocidad para que ocupe espacios cuadrados como el suyo, pero de seguro estos 2 objetos cabeza y rastro, tienen una mejor simplicidad que los 3 de cabeza, cuerpo y cola, quiero volver a aclarar que no estoy menospreciando el tuyo ;), solo que ve mas complejo a nivel de código de lo que aparenta a la vista :-\.