Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Crear un objeto en una posicion libre en la Grilla Aleatoriamente [Solucionado]  (Leído 411 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado T789

Saludos Makeros, estaba modificando un antiguo proyecto Maze, y me preguntaba como podia crear un objeto en una posicion libre

Mi personaje y los enemigos se mueven verficando una posicion libre de 32×32 en la grilla, se gestionar los movimientos en la grilla y crear objetos aleatorios pero lo que nose es como crear aleatoriamente algo en la grilla

Necesito que mi objeto verifique todos los espacios de 32×32 en la grilla y ver si esta libre de otro objeto solido o si tampoco hay un personaje inteligente en ella (incluyendo a mi personaje), y que de paso la cree en cualquier grilla

Casi nunca he trabajado con grillas, a veces solo las uso para movimientos y lo demas me encargo manualmente  :-[
« última modificación: Julio 02, 2020, 06:35:31 am por T789 »

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado Asterth

Respuesta #1 en: Junio 30, 2020, 07:02:49 am
Lo que pensé al instante es que cuando se cree el objeto aleatoriamente en la pantalla siempre tenga un codigo step que verifique si tiene espacio libre, evitando que se genere en zonas solidas.

 


Desconectado 3dgeminis

Respuesta #2 en: Julio 01, 2020, 07:38:19 pm
Puedes elegir un numero aleatorio en cada eje (x,y)  entre 1 y 32. Si la casilla resulta ocupada vuelve a repetir hasta que encuentre una casilla libre (puedes usar un ciclo while).
Crea 2 variables que guarden esos numeros y usalas para crear la instancia.

 


Desconectado T789

Respuesta #3 en: Julio 02, 2020, 04:17:30 am
Lo tipico es usar
while(!place_empty(x, y))
{
  x = irandom(room_width);
  y = irandom(room_height);
}
Pero eso solo me dara una posicion en cualquier lugar libre y lo que yo necesito es una posicion de 32×32 pixeles, cuando dijiste que lo hiciera buscando un espacio entre 1 y 32, como sugeririas que lo hiciera y de que forma deberia usar esos valores almacenados  ???

La verdad tenia la idea de crear objetos de grilla y almacenar sus puntos de anclajes en una lista pero eso tardaria, en especial la parte de añadir los objetos en cada parte de las rooms

 


Desconectado T789

Respuesta #4 en: Julio 02, 2020, 06:34:49 am
Problema resuelto, acabo de encontrar una buena forma de usar posiciones aleatorias
/// Event Create
var px, py;
px = 0;
py = 0;
// Almacenar posiciones x
repeat(room_width/32) //Se repetira segun las casillas horizontales del room
{
  xpos[px] = px*32;
  if (px != room_width/32) px += 1;
}
// Almacenar posiciones y
repeat(room_height/32) //Se repetira segun las casillas verticales del room
{
  ypos[py] = py*32;
  if (py != room_height/32) py += 1;
}
Y para cuando vaya a crear una instancia aleatoria, lo hago con una alarma
/// Alarma 0
var rx, ry;
rx = irandom(room_width/32);
ry = irandom(room_height/32);
bonus = instance_create(xpos[rx], ypos[ry], obj_bonus)

// Ajustar bonus a una posicion libre
with(bonus) {
  while(!place_empty(x, y))
  {
    x = other.xpos[irandom(room_width/32)]
    y = other.ypos[irandom(room_height/32)]
  }
}

 


Desconectado bygdle

  • Flota de Justicia Particular.
  • Moderadores globales
  • Okupa
  • *
  • Puntos: 2841
  • Mensajes: 1.715
  • Agradecido: 150 veces
  • Sexo: Masculino
  • Thomas the dank engine.
    • Ver Perfil
Una forma más fácil sería solo hacer esto:
/// Evento alarm
bonus = instance_create(0, 0, obj_bonus)
with(bonus) {
    while(!place_empty(x, y))
        x = irandom(room_width /32)*32;
        y = irandom(room_height/32)*32;
    }
}
Así te ahorras el uso de esos arreglos xpos y ypos.

alaberga regué el café.

BA:STFW&RTFM
 


Desconectado T789

La verdad que si lo habia considerado y tambien hay que poner eso en el instance_create para hacerlo aleatorio, igual gracias por la sugerencia