El aspecto que debe tener este "power up" es algo similar a las clásicas trampas de "Mario Bros".
(https://i.gyazo.com/a1f865b3aabf9bc881e3a0609d07e0f5.gif)
El código que tengo armado me permite una formación circular orbitando al jugador.
(https://i.gyazo.com/fe8960c72dbb74fd8d453f8dbd11c4eb.gif)
obj_Poder_Bola_Orbital_Linea
COLLISION obj_Jugador
[codigo]
///Creacion de las bolas
for(i=0; i<5; i++) //cantidad de bolas
{
id_bola=instance_create(obj_Jugador.x, obj_Jugador.y, obj_Bola_Orbital_Linea)
with(id_bola) {angulo_bola=72*other.i} // distancia de las bolas
}
instance_destroy()
[/codigo]
obj_Bola_Orbital_Linea
CREATE
[codigo]
///Variables
radio_bola = 120; //distancia de las bolas
angulo_bola = 0;
[/codigo]
STEP
[codigo]
///Codigo de la bola
x = obj_Jugador.x + cos(degtorad(angulo_bola)) * radio_bola;
y = obj_Jugador.y - sin(degtorad(angulo_bola)) * radio_bola;
angulo_bola = angulo_bola - 6; //velocidad de las bolas
instance_create(x,y,obj_Copia_Bola_Orbital_Triple);
instance_create(xprevious,yprevious,obj_Copia_Bola_Orbital_Triple);
[/codigo]
obj_Copia_Bola_Orbital_Triple
CREATE
[codigo]
image_speed = 0.1;
image_blend = c_purple;
image_alpha = 1;
[/codigo]
STEP
[codigo]
image_alpha -= 0.1;
if image_alpha < 0 instance_destroy();
[/codigo]
Mis bolas orbitan en forma circular al rededor del jugador con la misma velocidad que este, lo que busco es hacer un cambio en su formación, mi pregunta se puede resumir en esto.
¿Como cambio su formación circular al jugador por una formación lineal a este?
Primero debes crear las bolas una al lado de la otra (con un ciclo for por ejemplo) y en cada bola estos codigos :
CREATE
[gml]
distancia=(x-jugador.x)
giro=0
[/gml]
STEP
[gml]
giro+=5
x=jugador.x+lengthdir_x(distancia, giro)
y=jugador.y+lengthdir_y(distancia, giro)
[/gml]
Cita de: 3dgeminis en Octubre 01, 2017, 12:21:22 AM
Primero debes crear las bolas una al lado de la otra (con un ciclo for por ejemplo) y en cada bola estos codigos :
CREATE
[gml]
distancia=(x-jugador.x)
giro=0
[/gml]
STEP
[gml]
giro+=5
x=jugador.x+lengthdir_x(distancia, giro)
y=jugador.y+lengthdir_y(distancia, giro)
[/gml]
Pues eso me hace crear una bola que no cumple con ninguna característica.
(//)
Hace mucho tiempo hice de forma accidental la linea con el jugador, no le di relevancia por no ser lo que buscaba hace 1/4 de año, pero ahora me doy cuenta que podía ser un nuevo estilo de agrupamiento, para este accidente nenia que cambiarle la ubicación de algunas variables, pero no he logrado replicar este acontecimiento. :-\
Cita de: Naitsabes0 en Octubre 01, 2017, 01:15:43 AM
Cita de: 3dgeminis en Octubre 01, 2017, 12:21:22 AM
Primero debes crear las bolas una al lado de la otra (con un ciclo for por ejemplo) y en cada bola estos codigos :
CREATE
[gml]
distancia=(x-jugador.x)
giro=0
[/gml]
STEP
[gml]
giro+=5
x=jugador.x+lengthdir_x(distancia, giro)
y=jugador.y+lengthdir_y(distancia, giro)
[/gml]
Pues eso me hace crear una bola que no cumple con ninguna característica.
(//)
Hace mucho tiempo hice de forma accidental la linea con el jugador, no le di relevancia por no ser lo que buscaba hace 1/4 de año, pero ahora me doy cuenta que podía ser un nuevo estilo de agrupamiento, para este accidente nenia que cambiarle la ubicación de algunas variables, pero no he logrado replicar este acontecimiento. :-\
CODIGO CREATE DEL JUGADOR vamos a hacer que el jugador cree las bolas
///Creacion de las bolas
for(i=0; i<5; i++) //cantidad de bolas
{
id_bola=instance_create(obj_player.x, obj_player.y,obj_orb)
with(id_bola) {distancia=(x-obj_player.x+20)*other.i} // distancia de las bolas
}
y ya no hay mas te agrego una captura de como se ve , aveces debes de hacer mas de lo que crees para que algo funcione
Cita de: cristopher2545 en Octubre 01, 2017, 02:40:16 AM
Cita de: Naitsabes0 en Octubre 01, 2017, 01:15:43 AM
Cita de: 3dgeminis en Octubre 01, 2017, 12:21:22 AM
Primero debes crear las bolas una al lado de la otra (con un ciclo for por ejemplo) y en cada bola estos codigos :
CREATE
[gml]
distancia=(x-jugador.x)
giro=0
[/gml]
STEP
[gml]
giro+=5
x=jugador.x+lengthdir_x(distancia, giro)
y=jugador.y+lengthdir_y(distancia, giro)
[/gml]
Pues eso me hace crear una bola que no cumple con ninguna característica.
(//)
Hace mucho tiempo hice de forma accidental la linea con el jugador, no le di relevancia por no ser lo que buscaba hace 1/4 de año, pero ahora me doy cuenta que podía ser un nuevo estilo de agrupamiento, para este accidente nenia que cambiarle la ubicación de algunas variables, pero no he logrado replicar este acontecimiento. :-\
CODIGO CREATE DEL JUGADOR vamos a hacer que el jugador cree las bolas
///Creacion de las bolas
for(i=0; i<5; i++) //cantidad de bolas
{
id_bola=instance_create(obj_player.x, obj_player.y,obj_orb)
with(id_bola) {distancia=(x-obj_player.x+20)*other.i} // distancia de las bolas
}
y ya no hay mas te agrego una captura de como se ve , aveces debes de hacer mas de lo que crees para que algo funcione
Debo admitir que se ve bien.
(https://i.gyazo.com/493fc5de6eca769f63a0e1929bb56f8f.gif)
El funcionamiento es como el que especificas, las bolas van manteniendo una distancia = a la anterior, asiendo que orbiten sin romper la formación, podrían dar esto por resuelto, lo único que me causa inquietud es que a pesar de que modifico sus valores para distanciar un poco las bolas del jugador, la bola 1° o al menos la que esta mas cerca del jugador, pierde utilidad por estar dentro de el, como en la formación circular nunca una bola tocaba al jugador, pensé que consideraría al jugador como la zona de inicio para crear la 1° bola a un lado de este en vez de tenerlo encima, un detalle que no considere al empezar el post por creer que se formaría alejado de su centro ¿debería sumarle alguna variable a las funciones ya creadas o crear otra linea de código?.
Ya que lo he dejado así:
COLLISION obj_Jugador
[codigo]
///Creacion de las bolas
for(i=0; i<5; i++) //cantidad de bolas
{
id_bola=instance_create(obj_Jugador.x, obj_Jugador.y,obj_Bola_Orbital_Linea)
with(id_bola) {distancia=(x-obj_Jugador.x+48)*other.i} // distancia de las bolas
}
instance_destroy()
[/codigo]
Lo que explicaría el porque las distancias han sido separadas para parecer una linea de proyectiles mas que una barrera.
Cita de: Naitsabes0 en Octubre 01, 2017, 04:17:12 AM
Cita de: cristopher2545 en Octubre 01, 2017, 02:40:16 AM
Cita de: Naitsabes0 en Octubre 01, 2017, 01:15:43 AM
Cita de: 3dgeminis en Octubre 01, 2017, 12:21:22 AM
Primero debes crear las bolas una al lado de la otra (con un ciclo for por ejemplo) y en cada bola estos codigos :
CREATE
[gml]
distancia=(x-jugador.x)
giro=0
[/gml]
STEP
[gml]
giro+=5
x=jugador.x+lengthdir_x(distancia, giro)
y=jugador.y+lengthdir_y(distancia, giro)
[/gml]
Pues eso me hace crear una bola que no cumple con ninguna característica.
(//)
Hace mucho tiempo hice de forma accidental la linea con el jugador, no le di relevancia por no ser lo que buscaba hace 1/4 de año, pero ahora me doy cuenta que podía ser un nuevo estilo de agrupamiento, para este accidente nenia que cambiarle la ubicación de algunas variables, pero no he logrado replicar este acontecimiento. :-\
CODIGO CREATE DEL JUGADOR vamos a hacer que el jugador cree las bolas
///Creacion de las bolas
for(i=0; i<5; i++) //cantidad de bolas
{
id_bola=instance_create(obj_player.x, obj_player.y,obj_orb)
with(id_bola) {distancia=(x-obj_player.x+20)*other.i} // distancia de las bolas
}
y ya no hay mas te agrego una captura de como se ve , aveces debes de hacer mas de lo que crees para que algo funcione
Debo admitir que se ve bien.
(https://i.gyazo.com/493fc5de6eca769f63a0e1929bb56f8f.gif)
El funcionamiento es como el que especificas, las bolas van manteniendo una distancia = a la anterior, asiendo que orbiten sin romper la formación, podrían dar esto por resuelto, lo único que me causa inquietud es que a pesar de que modifico sus valores para distanciar un poco las bolas del jugador, la bola 1° o al menos la que esta mas cerca del jugador, pierde utilidad por estar dentro de el, como en la formación circular nunca una bola tocaba al jugador, pensé que consideraría al jugador como la zona de inicio para crear la 1° bola a un lado de este en vez de tenerlo encima, un detalle que no considere al empezar el post por creer que se formaría alejado de su centro ¿debería sumarle alguna variable a las funciones ya creadas o crear otra linea de código?.
Ya que lo he dejado así:
COLLISION obj_Jugador
[codigo]
///Creacion de las bolas
for(i=0; i<5; i++) //cantidad de bolas
{
id_bola=instance_create(obj_Jugador.x, obj_Jugador.y,obj_Bola_Orbital_Linea)
with(id_bola) {distancia=(x-obj_Jugador.x+48)*other.i} // distancia de las bolas
}
instance_destroy()
[/codigo]
Lo que explicaría el porque las distancias han sido separadas para parecer una linea de proyectiles mas que una barrera.
vale eso es porque no le estamos dando un valor a la y bien lo único que debes agregar es cambiar este codigo
///Creacion de las bolas
for(i=0; i<5; i++) //cantidad de bolas
{
id_bola=instance_create(obj_player.x, obj_player.y,obj_orb)
with(id_bola) {distancia=(x-obj_player.x+20)*other.i} // distancia de las bolas
}
por este otro aunque parecen lo mismo agregamos una nueva variable de distancia entre la primera pelota y el jugador
///Creacion de las bolas
for(i=0; i<9; i++) //cantidad de bolas
{
bola=instance_create(obj_player.x, obj_player.y,obj_orb)
with(bola) {distancia=(x-obj_player.x+20)*other.i+(y-obj_player.y+100)} // variable X y Y
}
donde
(x-obj_player.x+20) // es la distancia entre cada bola
y
(y-obj_player.y+100) // es la distancia entre la bola y el player
si lo haces bien te deberia quedar asi
Ok, cuando creas las bolas solo tenes que agregarle cierta distancia con respecto al jugador a la hora de crearlas
[gml]
for(i=0;i<5;i+=1) {instance_create(x+(i*32)+(50),y,bola)}
[/gml]
se crean 5 bolas
32 es el tamaño del sprite de la bola
50 es la distancia del jugador a la bola mas cercana
Cita de: cristopher2545 en Octubre 01, 2017, 05:41:55 AM
Cita de: Naitsabes0 en Octubre 01, 2017, 04:17:12 AM
Cita de: cristopher2545 en Octubre 01, 2017, 02:40:16 AM
Cita de: Naitsabes0 en Octubre 01, 2017, 01:15:43 AM
Cita de: 3dgeminis en Octubre 01, 2017, 12:21:22 AM
Primero debes crear las bolas una al lado de la otra (con un ciclo for por ejemplo) y en cada bola estos codigos :
CREATE
[gml]
distancia=(x-jugador.x)
giro=0
[/gml]
STEP
[gml]
giro+=5
x=jugador.x+lengthdir_x(distancia, giro)
y=jugador.y+lengthdir_y(distancia, giro)
[/gml]
Pues eso me hace crear una bola que no cumple con ninguna característica.
(//)
Hace mucho tiempo hice de forma accidental la linea con el jugador, no le di relevancia por no ser lo que buscaba hace 1/4 de año, pero ahora me doy cuenta que podía ser un nuevo estilo de agrupamiento, para este accidente nenia que cambiarle la ubicación de algunas variables, pero no he logrado replicar este acontecimiento. :-\
CODIGO CREATE DEL JUGADOR vamos a hacer que el jugador cree las bolas
///Creacion de las bolas
for(i=0; i<5; i++) //cantidad de bolas
{
id_bola=instance_create(obj_player.x, obj_player.y,obj_orb)
with(id_bola) {distancia=(x-obj_player.x+20)*other.i} // distancia de las bolas
}
y ya no hay mas te agrego una captura de como se ve , aveces debes de hacer mas de lo que crees para que algo funcione
Debo admitir que se ve bien.
(https://i.gyazo.com/493fc5de6eca769f63a0e1929bb56f8f.gif)
El funcionamiento es como el que especificas, las bolas van manteniendo una distancia = a la anterior, asiendo que orbiten sin romper la formación, podrían dar esto por resuelto, lo único que me causa inquietud es que a pesar de que modifico sus valores para distanciar un poco las bolas del jugador, la bola 1° o al menos la que esta mas cerca del jugador, pierde utilidad por estar dentro de el, como en la formación circular nunca una bola tocaba al jugador, pensé que consideraría al jugador como la zona de inicio para crear la 1° bola a un lado de este en vez de tenerlo encima, un detalle que no considere al empezar el post por creer que se formaría alejado de su centro ¿debería sumarle alguna variable a las funciones ya creadas o crear otra linea de código?.
Ya que lo he dejado así:
COLLISION obj_Jugador
[codigo]
///Creacion de las bolas
for(i=0; i<5; i++) //cantidad de bolas
{
id_bola=instance_create(obj_Jugador.x, obj_Jugador.y,obj_Bola_Orbital_Linea)
with(id_bola) {distancia=(x-obj_Jugador.x+48)*other.i} // distancia de las bolas
}
instance_destroy()
[/codigo]
Lo que explicaría el porque las distancias han sido separadas para parecer una linea de proyectiles mas que una barrera.
vale eso es porque no le estamos dando un valor a la y bien lo único que debes agregar es cambiar este codigo
///Creacion de las bolas
for(i=0; i<5; i++) //cantidad de bolas
{
id_bola=instance_create(obj_player.x, obj_player.y,obj_orb)
with(id_bola) {distancia=(x-obj_player.x+20)*other.i} // distancia de las bolas
}
por este otro aunque parecen lo mismo agregamos una nueva variable de distancia entre la primera pelota y el jugador
///Creacion de las bolas
for(i=0; i<9; i++) //cantidad de bolas
{
bola=instance_create(obj_player.x, obj_player.y,obj_orb)
with(bola) {distancia=(x-obj_player.x+20)*other.i+(y-obj_player.y+100)} // variable X y Y
}
donde
(x-obj_player.x+20) // es la distancia entre cada bola
y
(y-obj_player.y+100) // es la distancia entre la bola y el player
si lo haces bien te deberia quedar asi
Queda asi.
obj_Poder_Bola_Orbital_Linea
COLLISION CONTRA obj_Jugador
///Creacion de las bolas
for(i=0; i<5; i++) //cantidad de bolas
{
bola=instance_create(obj_Jugador.x, obj_Jugador.y,obj_Poder_Bola_Orbital_Linea)
with(bola) {distancia=(x-obj_Jugador.x+20)*other.i+(y-obj_Jugador.y+100)} // variable X y Y
}
instance_destroy()
El resultado es que el juego se queda congelado y se destruye .
(https://i.gyazo.com/76a498a744a7b39d9982852b59fe88e2.gif)
Si algo me llama la atención de esto, es que el evento instance_destroy() no parece activarse cuando el objeto ha sido tocado por el jugador, tal vez la razón por la que el juego queda congelado es porque el poder de multiplica indefinidamente, asiendo que se sature, pero no se crea ninguna bola en el proceso de colisión, por lo que no entiendo por que se congela el juego al activar el "power up".
Cita de: 3dgeminis en Octubre 01, 2017, 09:28:14 AM
Ok, cuando creas las bolas solo tenes que agregarle cierta distancia con respecto al jugador a la hora de crearlas
[gml]
for(i=0;i<5;i+=1) {instance_create(x+(i*32)+(50),y,bola)}
[/gml]
se crean 5 bolas
32 es el tamaño del sprite de la bola
50 es la distancia del jugador a la bola mas cercana
Quedaria como.
COLLISION CON obj_Jugador
///Creacion de las bolas
for(i=0;i<5;i+=1) {instance_create(x+(i*32)+(50),y,bola)}
{
id_bola=instance_create(obj_Jugador.x, obj_Jugador.y, obj_Bola_Orbital_Linea)
with(id_bola) {angulo_bola=72*other.i} // distancia de las bolas
}
instance_destroy()
Provocando un error al momento de colisionar con el objeto.
FATAL ERROR in
action number 1
of Step Eventobj_Jugador
for object obj_Poder_Bola_Orbital_Linea:
Variable obj_Poder_Bola_Orbital_Linea.bola(100022, -2147483648) not set before reading it.
at gml_Object_obj_Poder_Bola_Orbital_Linea_CollisionEvent_3_1 (line 3) - for(i=0;i<5;i+=1) {instance_create(x+(i*32)+(50),y,bola)}
Cita de: Naitsabes0 en Octubre 01, 2017, 10:03:38 PM
Cita de: 3dgeminis en Octubre 01, 2017, 09:28:14 AM
Ok, cuando creas las bolas solo tenes que agregarle cierta distancia con respecto al jugador a la hora de crearlas
[gml]
for(i=0;i<5;i+=1) {instance_create(x+(i*32)+(50),y,bola)}
[/gml]
se crean 5 bolas
32 es el tamaño del sprite de la bola
50 es la distancia del jugador a la bola mas cercana
Quedaria como.
COLLISION CON obj_Jugador
///Creacion de las bolas
for(i=0;i<5;i+=1) {instance_create(x+(i*32)+(50),y,bola)}
{
id_bola=instance_create(obj_Jugador.x, obj_Jugador.y, obj_Bola_Orbital_Linea)
with(id_bola) {angulo_bola=72*other.i} // distancia de las bolas
}
instance_destroy()
Provocando un error al momento de colisionar con el objeto.
FATAL ERROR in
action number 1
of Step Eventobj_Jugador
for object obj_Poder_Bola_Orbital_Linea:
Variable obj_Poder_Bola_Orbital_Linea.bola(100022, -2147483648) not set before reading it.
at gml_Object_obj_Poder_Bola_Orbital_Linea_CollisionEvent_3_1 (line 3) - for(i=0;i<5;i+=1) {instance_create(x+(i*32)+(50),y,bola)}
que raro a mi me funciona el código muy bien por lo tanto en el codigo de 3dgeminis te esta diciendo que la variable BOLA no existe ahi deberias remplazarla por id_bola
Citar
for(i=0;i<5;i+=1) {instance_create(x+(i*32)+(50),y,bola)}
Cita de: cristopher2545 en Octubre 01, 2017, 10:05:51 PM
Cita de: Naitsabes0 en Octubre 01, 2017, 10:03:38 PM
Cita de: 3dgeminis en Octubre 01, 2017, 09:28:14 AM
Ok, cuando creas las bolas solo tenes que agregarle cierta distancia con respecto al jugador a la hora de crearlas
[gml]
for(i=0;i<5;i+=1) {instance_create(x+(i*32)+(50),y,bola)}
[/gml]
se crean 5 bolas
32 es el tamaño del sprite de la bola
50 es la distancia del jugador a la bola mas cercana
Quedaria como.
COLLISION CON obj_Jugador
///Creacion de las bolas
for(i=0;i<5;i+=1) {instance_create(x+(i*32)+(50),y,bola)}
{
id_bola=instance_create(obj_Jugador.x, obj_Jugador.y, obj_Bola_Orbital_Linea)
with(id_bola) {angulo_bola=72*other.i} // distancia de las bolas
}
instance_destroy()
Provocando un error al momento de colisionar con el objeto.
FATAL ERROR in
action number 1
of Step Eventobj_Jugador
for object obj_Poder_Bola_Orbital_Linea:
Variable obj_Poder_Bola_Orbital_Linea.bola(100022, -2147483648) not set before reading it.
at gml_Object_obj_Poder_Bola_Orbital_Linea_CollisionEvent_3_1 (line 3) - for(i=0;i<5;i+=1) {instance_create(x+(i*32)+(50),y,bola)}
que raro a mi me funciona el código muy bien por lo tanto en el codigo de 3dgeminis te esta diciendo que la variable BOLA no existe ahi deberias remplazarla por id_bola
Citar
for(i=0;i<5;i+=1) {instance_create(x+(i*32)+(50),y,bola)}
Lo tengo como.
for(i=0;i<5;i+=1) {instance_create(x+(i*32)+(50),y,id_bola)}
Y todavía me dice que no puede leerlo.
FATAL ERROR in
action number 1
of Step Eventobj_Jugador
for object obj_Poder_Bola_Orbital_Linea:
Variable obj_Poder_Bola_Orbital_Linea.id_bola(100021, -2147483648) not set before reading it.
at gml_Object_obj_Poder_Bola_Orbital_Linea_CollisionEvent_3_1 (line 3) - for(i=0;i<5;i+=1) {instance_create(x+(i*32)+(50),y,id_bola)}
perdona que me eh liado aqui va el nombre del objeto orbita
for(i=0;i<5;i+=1) {instance_create(x+(i*32)+(50),y, obj_Bola_Orbital_Linea)}
Cita de: cristopher2545 en Octubre 01, 2017, 10:26:40 PM
perdona que me eh liado aqui va el nombre del objeto orbita
for(i=0;i<5;i+=1) {instance_create(x+(i*32)+(50),y, obj_Bola_Orbital_Linea)}
Si miro el lado bueno, el poder funciona sin congelar el juego por saturacion de elementos como estaba antes, por otro lado volvimos por donde empezamos con la 1° bola dentro del jugador. :-\
Antes:
(https://i.gyazo.com/493fc5de6eca769f63a0e1929bb56f8f.gif)
Despues:
(https://i.gyazo.com/9d96109517c3269b912c6267b589e8c1.gif)
Por lo que le estamos dando vueltas en circulo por decirlo de otro modo, sin embargo se puede notar que en el antes la distancia es igual para todas las bolas, mientras en que el después la primera bola permanezca a una distancia mas lejana de las demás, aclaro que al después le coloque una profundidad -2 para que se pueda ver donde esta, así que todavía la bola central no sale del contacto con el jugador. :-[
mhhhh el código que te pase antes funciona perfectamente conmigo y no sale la bola que me dices
///Creacion de las bolas
for(i=0; i<9; i++) //cantidad de bolas
{
bola=instance_create(obj_player.x, obj_player.y,object2)
with(bola) {distancia=(x-obj_player.x+20)*other.i+(y-obj_player.y+100)} // variable X y Y
}
te dejo el editable revisa el codigo y ve si algo haces mal