Octubre 12, 2011, 02:26:51 PM Ultima modificación: Octubre 12, 2011, 06:19:16 PM por kaliman777
Hola:

Quiero que al presionar CONTROL, se creen tres objetos: uno en 10,10; otro en 80,10 y el otro en 150,10. Pero que en cada tirada ellos puedan salir en otra posici?n no en el mismo, es decir que se roten de lugar, que se intercambien las posiciones en cada tirada. No ando muy claro c?mo logralo.

Gracias, por su futura ayuda!!
La verdad es como la luz de una vela, que ni la oscuridad inmensa, puede opacarla.

Que un objeto salga en cualquiera de esas posiciones o que 3 objetos se turnen?
No se mucho pero creo que se resolveria con un choose
El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy


Cita de: Mgbu en Octubre 12, 2011, 06:27:19 PM
Que un objeto salga en cualquiera de esas posiciones o que 3 objetos se turnen?
No se mucho pero creo que se resolveria con un choose

Que se turnen en las tres posiciones dadas, cada vez que se presione control, pero al azr, no definido por usuario: Ejemplo:
keyboard control press event:
Primera vez:
Objeto1-posici?nx
Objeto2-posici?ny
Objeto3-posici?nz

Segunda vez:
Objeto1-posici?ny
Objeto2-posici?nz
Objeto3-posici?nx

Etc, etc.


La verdad es como la luz de una vela, que ni la oscuridad inmensa, puede opacarla.

Crea los tres objetos que quieres que se alterner y asignales sus respectivos sprites.
Luego de eso crea un objeto "Controlador" y ahora lo programaras de la siguiente manera (Los valores los puse yo, adaptalos a tu juego):

Evento "Create":
[gml]
global.objeto1_lugar = 1
global.objeto2_lugar = 2
global.objeto3_lugar = 3
[/gml]

Evento "KeyPress <Space>":
[gml]
//Destruir las instancias si es que existen, para que no se acumulen ni entren en conflicto.
if instance_exists(objeto1)
{
with objeto1
{
  instance_destroy()
}
}
if instance_exists(objeto2)
{
with objeto2
{
  instance_destroy()
}
}
if instance_exists(objeto3)
{
with objeto3
{
  instance_destroy()
}
}
//Crear las nuevas instancias en los lugares deseados.
switch (global.objeto1_lugar)
{
case 1: instance_create(0,0,objeto1); global.objeto1_lugar += 1; break;
case 2: instance_create(48,48,objeto1); global.objeto1_lugar += 1; break;
case 3: instance_create(96,96,objeto1); global.objeto1_lugar = 1; break;
}
switch (global.objeto2_lugar)
{
case 1: instance_create(0,0,objeto2); global.objeto2_lugar += 1; break;
case 2: instance_create(48,48,objeto2); global.objeto2_lugar += 1; break;
case 3: instance_create(96,96,objeto2); global.objeto2_lugar = 1; break;
}
switch (global.objeto3_lugar)
{
case 1: instance_create(0,0,objeto3); global.objeto3_lugar += 1; break;
case 2: instance_create(48,48,objeto3); global.objeto3_lugar += 1; break;
case 3: instance_create(96,96,objeto3); global.objeto3_lugar = 1; break;
}
[/gml]

PD: Te dejo editable por las dudas.

Bueno a m? se me ocurre algo m?s complejo, pero aqu? va:

Primero, en un objeto de control, en create creas los siguientes arrays
[gml]
posiciones[0,0]=10;
posiciones[0,1]=10;
posiciones[1,0]=80;
posiciones[1,1]=10;
posiciones[2,0]=150;
posiciones[2,1]=10;
[/gml]

Y luego en control le ponemos la orden de que, si no existen, qe los cree, y los coloque en una posici?n aleatoria
[gml]
if(!instance_exists(objeto_1)) //en teoria, si no existe el 1 no existen los 3
{
  instance_exists(10,10,objeto_1)
  instance_exists(10,10,objeto_2)
  instance_exists(10,10,objeto_3) // de momento no nos interesa que se empalmen, ahora se reordenaran
}
objetos[0]=objeto_1;
objetos[1]=objeto_2;
objetos[2]=objeto_3;

posiciones_ocupadas[0]=false;
posiciones_ocupadas[1]=false;
posiciones_ocupadas[2]=false;
for(i=0;i<3;i+=1)
{
  posicion=floor(random(3));
  while(posiciones_ocupadas[posicion])
  {
    posicion=floor(random(3));
  }
  objetos.x=posiciones[posicion,0];
  objetos.y=posiciones[posicion,1];
}
[/gml]

Y bueno, en teor?a deber?a funcionar, lo no pruebo probar por que no puedo correr el GM por problemas del driver grafico  :'(... Pero espero y te sirva

#5 Octubre 13, 2011, 12:03:34 AM Ultima modificación: Octubre 13, 2011, 01:54:30 AM por kaliman777
Maanup: Tu c?digo hace lo mejor que puede pero ya se puede predecir qu? objeto vendr? en las posiciones, yo quiero que sea por azar, que salgan donde quieran pero no definido por m?.

Es decir, seg?n tu c?digo si el azul sali? en 0,0 vendr? en 48,48 en la pr?xima, yo quiero que no se pueda predecir d?nde saldr? porque el juego dejar?a de tener sentido. Si puedes modificarle algo para que salgan al azr. Por favor.

Gracias de nuevo.
La verdad es como la luz de una vela, que ni la oscuridad inmensa, puede opacarla.

Ah! El tema es que explicaste mal lo que querias me parece. Bah, en realidad, yo entendi mal.

El de knd144 no te sirve?

Ahora veo que puedo hacer con el mio :)

Lo logre arreglar en 5 minutos nomas, pero habia un error y no sabia donde estaba. Luego de mucho revisar, vi que me faltaron 3 "break;" y por eso no andaba, te imaginaras mi bronca, pero bueno. Todo salio bien, y aca esta tu script, y tu editable :)

[gml]
//Destruir las instancias si es que existen, para que no se acumulen ni entren en conflicto.
if instance_exists(Objeto_1)
{
with Objeto_1
{
  instance_destroy()
}
}
if instance_exists(Objeto_2)
{
with Objeto_2
{
  instance_destroy()
}
}
if instance_exists(Objeto_3)
{
with Objeto_3
{
  instance_destroy()
}
}
//Crear las nuevas instancias en los lugares deseados (MISMO AL EVENTO CREATE).
global.Objeto_1_lugar = choose(1,2,3)
switch (global.Objeto_1_lugar)
{
case 1: instance_create(0,0,Objeto_1);  global.Objeto_1_caso = 1; global.Objeto_2_lugar = choose(2,3); break;
case 2: instance_create(48,0,Objeto_1); global.Objeto_1_caso = 2; global.Objeto_2_lugar = choose(1,3);  break;
case 3: instance_create(96,0,Objeto_1); global.Objeto_1_caso = 3; global.Objeto_2_lugar = choose(1,2); break;
}
switch (global.Objeto_2_lugar)
{
case 1: instance_create(0,0,Objeto_2); if global.Objeto_1_caso = 2 {global.Objeto_3_caso = 3} else if global.Objeto_1_caso = 3 {global.Objeto_3_caso = 2}; break;
case 2: instance_create(48,0,Objeto_2); if global.Objeto_1_caso = 1 {global.Objeto_3_caso = 3} else if global.Objeto_1_caso = 3 {global.Objeto_3_caso = 1}; break;
case 3: instance_create(96,0,Objeto_2); if global.Objeto_1_caso = 1 {global.Objeto_3_caso = 2} else if global.Objeto_1_caso = 2 {global.Objeto_3_caso = 1}; break;
}
switch (global.Objeto_3_caso)
{
case 1: instance_create(0,0,Objeto_3); break;
case 2: instance_create(48,0,Objeto_3); break;
case 3: instance_create(96,0,Objeto_3); break;
}
[/gml]

PD: Arregle algunos detalles en los nombres, en los sprites para hacerlo un poco mas presentable. Ademas, agregue la parte del script que dice "(MISMO AL EVENTO CREATE)" en el evento create, valga la redundancia, para que apenas pruebes el juego ya salgan los cuadrados.

Muchas gracias, la verdad eres muy colaborador y eso es muy bueno para esta comunidad. Me sirve tu ejemplo a la perfecci?n, parece simple este tipo de scripts pero casi siempre creamos un objeto y ya, verdad que no era tan simple?

El de knd144 me sirve, pero para aplicarlo es un poco complejo y lo usar? para otro juego donde aplica el script de ?l.

Mil gracias a ambos!!!!
La verdad es como la luz de una vela, que ni la oscuridad inmensa, puede opacarla.

Cita de: kaliman777 en Octubre 13, 2011, 02:26:41 PM
Muchas gracias, la verdad eres muy colaborador y eso es muy bueno para esta comunidad. Me sirve tu ejemplo a la perfecci?n, parece simple este tipo de scripts pero casi siempre creamos un objeto y ya, verdad que no era tan simple?

El de knd144 me sirve, pero para aplicarlo es un poco complejo y lo usar? para otro juego donde aplica el script de ?l.

Mil gracias a ambos!!!!

Muchas gracias por el cumplido :)

Me alegro que el script te haya funcionado a la perfeccion y que hayas elegido al mio jajaj. Con todo respeto para knd144, ya que es un gran usuario.

Es una tendencia m?a el se cada vez m?s sistem?tico, o sea me complico las cosas haci?ndolas m?s complejas (pensando en si a futuro mejorar? tal cosa, o si se har? grande etc)  :P

CitarMe alegro que el script te haya funcionado a la perfeccion y que hayas elegido al mio jajaj. Con todo respeto para knd144, ya que es un gran usuario.
Gran usuario?  :-[ me qued? grande el alago XD, pero gracias

repeat(3){instance_create(random(room_width),random(room_height),choose(object1,object2,object3));}

Cita de: elviskelley en Octubre 14, 2011, 06:13:50 PM
repeat(3){instance_create(random(room_width),random(room_height),choose(object1,object2,object3));}


Sin querer ofender te corrigo. Lo que el necesita no es todo al azar.

Lo que el necesita es, me imagino, algo como el juego de los 3 vasos que adentro se esconde una pelotita, se mezclan los vasos y tenes que adivinar en cual vaso esta. Por lo que los vasos deben quedar en alguna de las 3 posiciones predefinidas pero al azar ordenados, ademas de no repetirse en niguna posicion.

Creo que ya estaba solucionado el tema.