Cachear objetos dinamicaménte con el juego inicializado


  • Mod

    Buenas Gente!

    Veran, necesito saber si existe alguna manera de cargar un nuevo objeto (llave e imagen) una vez que el juego ya esta inicializado.

    Sabemos que cuando inicializamos el juego todo lo de preload se cachea, y bueno.. no puedes utilizar una llave que no se haya cacheado al comenzar el juego dado a que el phaser te tira un error de que dicha llave no esta almacenada en la cache.. y el objeto se crea, pero no se visualiza la textura del mismo.

    Y es eso lo que quiero, básicamente cachear objetos de manera dinámica mientras el juego esta inicializado.

    Espero alguien sepa sobre eso. saludos!


  • administrators

    Es posible hacerlo aunque no recomendable. Si vas a cargar muchos datos te recomiendo crear varios Phaser.State, pero vamos primero con la solución a lo que has pedido.

    Phaser.Loader tiene eventos de carga, que nos avisan cuando algo se ha acabado de cargar. La ventaja de usar preload y create es que Phaser gestiona esos eventos de forma transparente pero es posible usarlos de forma manual.

    function create(){
       game.load.image("imagen","imagen.png");
       game.load.start();
       game.load.onLoadComplete.add(function(){
           // aquí ya estamos seguros de que imagen está en cache
           game.add.sprite(100,100,"imagen");
       },this);
        
    }
    

    La opción de los Phaser.State es conveniente si tienes niveles y cada uno carga recursos muy distintos. Un esqueleto básico sería así

    var game = new Phaser.Game(600,600,Phaser.AUTO,"",new Nivel1());
    
    game.state.add("Nivel2",new Nivel2());
    
    function Nivel1(){
        this.preload = function(){
    
        }
        this.create = function(){
            console.log("NIVEL 1");
            game.state.start("Nivel2",true);
        }
    
        this.update = function(){
            
        }
    }
    
    
    function Nivel2(){
        this.preload = function(){
    
        }
        this.create = function(){
            console.log("NIVEL 2");
        }
    
        this.update = function(){
    
        }
    }
    

    Por supuesto el game.state.add puede ir en cualquier parte antes de hacer la llamada a start. Cada Phaser.State tiene su preload, su create y su update, pero la caché es compartida.


  • Mod

    @adrian

    Principalmente, gracias por responder.

    La verdad he usado los states pero solo valen para crear niveles, lo que yo busco es agregar esos objetos en la cache de manera dinamica sin cambiar states ¿Para que?

    Estoy terminando un Map Generato que permite la creacion del mapa, y manipulacion de objetos, agregar determinadas fisicas, funciones etc... y al exportarlo, basicamente exportarias el juego generado y listo para ser usado y editado por el usuario en caso de ser necesario o reparar posible bug.

    Ahora bien, al ingresar al MapGenerator el usuario contara con los objetos por defecto del sistema, pero ademas podra ir agregando nuevos objetos que desee y crea convenientes, por lo que para usar ese nuevo objeto mientras el juego esta inicializado es necesario cachearlo.

    Espero que se entienda lo de este proyecto. Saludos!


Accede para responder
 

Has perdido la conexión. Reconectando a Gamedev Hispano.