Problema para generar niveles aleatorios

Abrir este proyecto en el editor de pilas

Hola! tengo un problema para genera una puerta o un bloque en el lugar de un objeto llamado “azar”. El objeto “azar” al iniciar decide si es una puerta o un bloque, sin embargo no se porque se crea en coordenadas incorrectas y a veces ni se crea.

Hola @Jorge has hecho algo complicado allí.
No encuentro el error que dices, en mi caso siempre se genera el actor azar y siempre hay al menos una puerta.
No pude seguirle el hilo al código, pero sí veo algo raro a la hora de crear una variable del proyecto.
Usas:

 public mapas = {....}

En el código del proyecto y luego tratas de acceder a la variable usando:

let mapas = this.proyecto.mapas;

Técnicamente hablando, this.proyecto.mapas invoca una propiedad de la clase proyecto. Pero al usar public estas… (no tengo idea qué hace public, no entendí cuando lo leí :sweat_smile:)…
Quizás si lo haces de la manera que indica el manual se arregle.

Hola lukeitor, si siempre se genera una puerta porque asi esta programado en el objeto mapas (este objeto tiene 4 posibilidades de donde poner la puerta por lo que siempre hay una). El tema es que el objeto “azar” deberia generarse en la posicion X que indica el objeto mapas (y luego decidir si es una puerta o un muro), aqui no se que ocurre y no genera nada ademas genera una puerta fuera de lugar (en el lugar que esta el objeto azar aun siendo que esta desactivado)…

Public deja que pueda acceder al valor del objeto desde otra escena , si no lo pusiera publico no me dejaria acceder.
Y el “let mapas” que puse es un poco redundante pero tampoco me deja acceder si no lo hago así.

Es un bug, aunque el actor azar está como desactivado se sigue creando.
El bug debe originarse en usar el actor azar para clonar en sus coordenadas una puerta o bloque.
Fijate que los lugares vacios son los lugares donde debería estar el actor azar.

Ahí te paso el proyecto sacando el actor azar.
Abrir este proyecto en el editor de pilas

Quizás quieras que se genere una sola puerta, en ese caso podes hacer que una actor cuente la cantidad de puertas y saque todas menos una.
Asegúrate de que la cuenta de puertas se haga luego de que se cree el mapa.

borrar_todas_las_puertas_menos_una() {
    //importante ponerle a la puerta la etiqueta puerta

    //retorna un array que tiene todos los actores puerta
    let puertas = this.pilas.obtener_todos_los_actores_con_la_etiqueta("puerta");

    //si hay más de una puerta, entonces eliminamos todas menos una
    if (puertas.length > 1) {
      
      //sacamos una puerta del array
      let puertas_sobrantes = puertas.shift();

      //borro todas las puertas que quedaron en el array y pongo un actor bloque en su lugar
      for (let puerta of puertas) {
        this.pilas.clonar_en("bloque", puerta.x, puerta.y);
        puerta.eliminar();
      }
    }

  }