Es simple, uso la versión "Game Maker: Studio Master Collection (v1.2.1130)" de Game Maker.
Quiero saber como puedo generar objetos (ya creados) de 16x16 en una room de 640x480 (y alineados en coordenadas múltiplos de 16) sin que haya 2 objetos iguales en un mismo lugar, en 2D, no tipo Terraria, si no que en vista aérea. Que luego de generarse dicho terreno (que cabe recalcar, que no debe llenar toda la room, si no solo unas pequeñas partes) hecho con objetos de 16x16, se generen exactamente 5 o 6 objetos (que no forman parte del terreno, si no que son como NPC's) también en dicho terreno, sin generarse colisionando con el terreno o entre ellos.
Creo que eso es todo, espero y me puedan responder, de antemano, gracias.
Hola Luis
Una idea rápida es que puedes combinar dos ciclo FOR para recorrer cada casilla de la room y crear un objeto al azar ahí.
No entiendo qué variables has usado, ni qué hace cada objeto, así que lo explicaré de forma genérica y tu lo adaptas a tus necesidades.
En el create event:
[gml]var i, j;
for (i=0; i<480; i+=16) {
for (j=0; j<640; j+=16) {
instance_create( j , i , choose(obj_bloque1,obj_bloque2,obj_bloque3) )
}
}[/gml]
Eso recorre cada casilla de la room y crea un objeto al azar entre los 3 bloques que puse de argumentos para la función "choose".
El problema de esto es que los objetos son creados al azar usando una distribución uniforme, eso significa que cada objeto tiene la misma probabilidad de ocurrencia (a menos que lo pongas dos veces dentro del choose, en ese caso el objeto tendría el doble de probabilidades de ser creado que los demás).
Un sistema mejor (pero más complejo) puede ser quizás crear un PERLIN NOISE que guarde un número de 0 a 1 en una DS_GRID y luego crear un objeto según el valor que está en la grid.
ej: si el número va de 0 a 0.2 que me cree oceano, hasta 0.7 que me cree el continente y si el número da mayor a 0.7 que me cree unas montañas, etc.
Saludos