Noticias

Importante: ¡Si quieres publicar tu juego no olvides leer este tema!

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: Bloques que reaparecen al azar por la room(Resuelto)  (Leído 514 veces)

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

Desconectado Zhekken

en: Diciembre 01, 2020, 06:13:15 pm
Hola, necesito ayuda con una problema que tengo... estoy haciendo un juego de romper bloques, el tipico brickbreacker y para no estar haciendo que despues de romper el ultimo bloque el jugador pasara a otra room y tener que hacer muchos niveles y demas, preferi optar por la opcion mas comoda que conozco que es hacer que despues de que el ultimo bloque sea destruido, se creen bloques al azar por la room y estos se ajusten a las casillas(cuadriculas) una vez que aparezcan, de esta manera se estarian creando bloques siempre que se rompa el ultimo, utilize este código:

if(!instance_exists(obj_bloque))
{
i = 10
repeat(i)
   {
    var posx = random_range(32,416)
    var posy = random_range(32,160)
    instance_create(posx,posy,obj_bloque)
        with (obj_bloque)
        {
            if !place_snapped(32, 8)
            {
                move_snap(32, 8);
            }
        }
   }
}

Tengo algunas preguntas sobre el mismo tema si es que me lo permiten pero la primera pregunta es la mas importante y es el motivo por el que vengo a pedirles ayuda:

1.- ¿Como hago para que aparezcan los bloques sin estar uno encima de otro? pasa que a veces los bloques se crean en las mismas casillas y esto hace que cuando se rompa un bloque pareciera que justo aparece otro en la misma posición y eso se ve algo feo

2.-¿se puede hacer una especie de figura prefabricada para hacerlas aparecer? osea una forma con los cuadritos para que cuando se rompa el ultimo aparezca una de las tantas figuras ya hechas al azar, digamos que haces 20 figuras pues aparecera una de esas tantas al azar

3.- dejare una imagen para que me expliquen como solucionar el ultimo problema, tengo una mini IA(no se si llamarle inteligencia artificial) el caso es que hice que al iniciar el juego si la pelota choque con el jugador (unicamente si choca) se activara el point_direction hacia la direccion del bloque, el problema con esto es que la pelota persigue por orden en que se crearon los bloques y si el bloque 1 esta por encima del bloque 2 se nota como la pelota se dirige al bloque 1, quiero que persiga al bloque mas cercana en la posicion Y de esta manera no se vera tan raro

===

como dije antes, mas me importa que me ayuden con la primera pregunta ya que es el tema principal, de todas maneras si responden las demas preguntas se los agradecería mucho, no creo que hacer varias preguntas del mismo tema incumpla las reglas pero si llega a ser el caso modifico y elimino la 2 y 3

« última modificación: Diciembre 04, 2020, 11:24:20 pm por Zhekken »

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado T789

Respuesta #1 en: Diciembre 01, 2020, 06:41:52 pm
Saludos Zhekken

Para resolver tu primera duda, sugiero
que cambies tu codigo por el siguiente
/// Donde sea que lo hayas puesto
if !instance_exists(obj_bloque)
{
  var i, posx, posy;
  i = 0;
  repeat(10) {
    posx[i] = random_range(32, 416)
    posy[i] = random_range(32, 160)
    if (i > 0) {
      while(posx[i] == posx[i-1])
       posx[i] = random_range(32, 416);
      while(posy[i] == posy[i-1])
       posy[i] = random_range(32, 160);
    }
    with(instance_create(posx[i], posy[i], obj_bloque) {
      if !place_snapped(32, 8)
      move_snap(32, 8)
    }
    // Aumentar indice
    i += 1;
  }
}

 
Los siguientes usuarios dieron las gracias a este tema: Zhekken


Desconectado Zhekken

Respuesta #2 en: Diciembre 01, 2020, 07:36:17 pm
T789 muchas gracias por tu ayuda, ahora se ve un poco mejor pero sigue habiendo un bloque que aparece detras de otro, son 10 bloques los que deben aparecer al azar o los que sea que escriba en la variable i, tu codigo entiendo mas o menos de que va pero quiza sea que en algun momento solo hace aparecer 9 bloques

 


Desconectado T789

Respuesta #3 en: Diciembre 01, 2020, 07:55:54 pm
Nose porque este fallando, intenta cambiar el 10 por un 11, aunque si no es eso lo que falla, entonces intenta de este otro metodo
/// Donde sea que lo hayas puesto
if !instance_exists(obj_bloque)
{
  var i, posx, posy;
  i = 0;
  repeat(10) {
    posx[i] = (irandom_range(32, 416)/32)
    posy[i] = (irandom_range(32, 160)/8)
    if (i > 0) {
      while(posx[i] == posx[i-1])
       posx[i] = (irandom_range(32, 416)/32);
      while(posy[i] == posy[i-1])
       posy[i] = (irandom_range(32, 160)/8);
    }
   instance_create(posx[i], posy[i], obj_bloque)
    // Aumentar indice
    i += 1;
  }
}

 


Desconectado Zhekken

Respuesta #4 en: Diciembre 01, 2020, 09:12:52 pm
Ese ultimo código me pone todos los bloques juntos en la posición X y Y prácticamente en 0

 


Desconectado getnoff

Respuesta #5 en: Diciembre 03, 2020, 01:27:05 am
Saludos, prueba con este:
if(!instance_exists(obj_bloque))
{
    var i, posx, posy, bloqueactual;
    i = 10;
    repeat(i)
    {
        posx = random_range(32,416);
        posy = random_range(32,160);
       
        bloqueactual = instance_create(posx,posy,obj_bloque);
       
        with(bloqueactual)
        {
            while (place_meeting(x,y,obj_bloque))
            {
                other.posx = random_range(32,416);
                other.posy = random_range(32,160);
               
                x = other.posx;
                y = other.posy;
            }
        }
       
        with (obj_bloque)
        {
            if !place_snapped(32,8)
            {
                move_snap(32,8);
            }
        }
    }
}
Consiste en que luego de crear una instancia del bloque, se haga un ciclo while que compruebe si esta de ahora (bloqueactual) está en contacto con alguna otra instancia del bloque. De ser así, se vuelven a generar valores al azar de posición en ese rango y se le asignan a la actual, y así repetirá hasta que no tengan contacto, forzando a que queden en distintos lugares.

 
Los siguientes usuarios dieron las gracias a este tema: Zhekken


Desconectado Zhekken

Respuesta #6 en: Diciembre 04, 2020, 11:21:57 pm
Getnoff Muchas gracias  ;D tu código funciono a la perfección, me doy cuenta de que en todas las preguntas que he hecho siempre llegas para salvar el día  XD mil gracias.

T789 Muchas gracias a ti también  8)