Buenas, otra vez ando por aqui.

la pregunta es, en mitad de una partida, al crear una instancia nueva, como comprobar el espacio donde se va a posicionar si esta libre o no, y si no es asi, pues crear la instancia en otro lugar o posicion.

Echadme una mano!!!!   ;)
PCNONOGames  www.pcnono.es

En el evento create del objeto pon que si ocupa el lugar de otra instancia esta se destruya y cree una nueva. Te pongo un ejemplo de como sería crear un objeto de un gato que no pudiera ocupar el mismo lugar que el de un perro.
if(place_meeting(x, y, obj_perro)) {
  instance_destroy();
  instance_create( otra_posicion_x, otra_posicion_y, obj_gato);
}
Ahora si.

Mejor, en vez de crear y destruir, puedes cambiar la posición de la instancia con la función "move_random", o usar éste código que viene en el manual de GM8:
[gml]
while (!place_free(x,y))
{
    x = random(room_width);
    y = random(room_height);
}

[/gml]

Si, también vale. Pero recuerda marcar todos los objetos que no quieras que estén en la misma posición como sólidos.
Ahora si.

Creo que voy a utilizar una mezcla de los dos ejeplos. Jejejej.

Muchas gracias. ;D
PCNONOGames  www.pcnono.es

Cita de: venus en Noviembre 08, 2014, 04:47:12 PM
Si, también vale. Pero recuerda marcar todos los objetos que no quieras que estén en la misma posición como sólidos.

Venus que quieres decir con esto?? No entiendo el porque??
PCNONOGames  www.pcnono.es

Estoy utilizando game majer studio

Y no se como expresar esto para que gm studio me entienda.

Estoy utilizando esta funcion. Por favor, que alguien me la corrija, please. Bueno ahi va la funcion en una captura. Thank you.
PCNONOGames  www.pcnono.es

Primero, sobre lo que dijo venus, es porque las funciones place_free y move_random evalúan la variable solid de las instancias, entonces si hay una instancia (u objeto) que no está marcado como sólido se puede crear otra instancia encima; una forma de evitar eso sería cambiar la función place_free por place_empty.

En tu código, el problema principal es que para entrar en el primer if no debe existir una instancia de objectMOTORISTA y por lo tanto las variables objectMOTORISTA.x y objectMOTORISTA.y no existen y no pueden usarse en el while. Para que funcione, el código debe dividirse en dos y usarse en dos objetos diferentes: el primer objeto debe revisar si no existe una instancia de objectMOTORISTA y crearla, en el evento create de objectMOTORISTA debe ir alguno de los códigos que te mencionamos anteriormente.

creo que el while not, no es admitido por GMstudio, ese es el raiz del problema, o me equivoco. ???
PCNONOGames  www.pcnono.es


Cita de: nonoroman en Noviembre 10, 2014, 05:42:13 PM
Una mano, please!!  :-X

he probado esto, pero no hay manera. Ni siquiera crea el objecto


if not(instance_exists(objectMOTORISTA))
{
         randomize()
         instance_create(choose(624, 784, 944, 1104), -20, objectMOTORISTA);
         
         while (place_meeting(objectMOTORISTA.x, objectMOTORISTA.y, all))
        {
           
            randomize()
            instance_create(choose(624, 784, 944, 1104), -20, objectMOTORISTA);
        }
}
PCNONOGames  www.pcnono.es

#11 Noviembre 10, 2014, 07:29:32 PM Ultima modificación: Noviembre 10, 2014, 07:31:59 PM por venus
Te digo lo que veo:

-Creo que debería ser así: if (!instance_exists(objectMOTORISTA))
-Nunca he usado while, así que no te puedo ayudar en eso.
-Randomize() es una función ¿No? Porque no existe ese comando.
-No se si se puede poner all en place_meeting, pero nunca lo he probado.
-¿Quieres que te haga el código? Solo tienes que decirme en que coordenadas quieres que aparezca y listo. Es muy sencillo, creo que te estás complicando un poco la vida xD. Pero nos pasa a todos.
Ahora si.

Cita de: venus en Noviembre 10, 2014, 07:29:32 PM
Te digo lo que veo:

-Creo que debería ser así: if (!instance_exists(objectMOTORISTA))
-Nunca he usado while, así que no te puedo ayudar en eso.
-Randomize() es una función ¿No? Porque no existe ese comando.
-No se si se puede poner all en place_meeting, pero nunca lo he probado.
-¿Quieres que te haga el código? Solo tienes que decirme en que coordenadas quieres que aparezca y listo. Es muy sencillo, creo que te estás complicando un poco la vida xD. Pero nos pasa a todos.

Si venus, echame una mano please.
las coordenadas concretas donde deberian de aparecer estan en el codigo que puse anteriormente en el choose.

La idea es comprobar si existe un objeto. Sino existe, entonces crearlo en unas coordenadas de x en concreto entre 4. Pero haciendolo de forma aleatoria, y cuando en aleatorio selecione el lugar x comprobar si esta ocupado, para asi, volver hacer el random de los 4 sitios posibles, hasta encontrar uno libre.

Please help me.
PCNONOGames  www.pcnono.es

Esto colócalo en el evento create de objectMOTORISTA:
if(!place_free(x,y)) {
  instance_destroy();
   instance_create(choose(624, 784, 944, 1104), -20, objectMOTORISTA);
}



Te aviso que si y=-20, objectMOTORISTA va a aparecer fuera de la room.
Ahora si.

Cita de: venus en Noviembre 11, 2014, 07:08:21 PM
Esto colócalo en el evento create de objectMOTORISTA:
if(!place_free(x,y)) {
  instance_destroy();
   instance_create(choose(624, 784, 944, 1104), -20, objectMOTORISTA);
}



Te aviso que si y=-20, objectMOTORISTA va a aparecer fuera de la room.

Muchas gracias venus.

Pero esto va a destruir el objecto con el que se encuentra, lo ideal seria no destruirlo, sino que buscara nuevamente otro lugar libre.

De todas formas muchas gracias.
PCNONOGames  www.pcnono.es