es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Hay dos objetos en la vista, ambos se superponen uno encima del otro, pero no se produce un evento en Phaser 3 JavaScript.

Lo que quiero es que cuando el jugador se superponga con la moneda, la moneda desaparezca, pero por alguna razón no ocurre y no sé por qué la función cutcoin no se llama.

function create() {
    var healthGroup = this.physics.add.staticGroup({
        key: 'ycoin',
        frameQuantity: 10,
        immovable: true
    });

    var children = healthGroup.getChildren();

    for (var i = 0; i < children.length; i++) {
        var x = Phaser.Math.Between(50, 750);
        var y = Phaser.Math.Between(50, 550);
        children[i].setPosition(x, y);
    }

    healthGroup.refresh();
    moveCoin = this.add.sprite(60, 340, 'ycoin').setInteractive();

    this.input.keyboard.on('keydown-A', () => {   
        moveCoin.allname = 'green';
        diceNumber = 1;
        moveCoinStep();
        setTimeout(() => {
            this.physics.add.overlap(moveCoin, healthGroup, cutcoin, null, this);
        }, 1000);
    });
}

function cutcoin(movecoin1, healthGroup) {
    console.log('++++++', moveCoin, healthGroup);     
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que la función cutcoin no se está llamando cuando el jugador se superpone con la moneda. Para investigar y corregir el problema, podemos intentar lo siguiente:

    1. Comprobar si el healthGroup ha sido creado y posicionado correctamente en la pantalla del juego.
    2. Comprobar si el sprite del jugador (moveCoin) se ha creado y posicionado correctamente en la pantalla del juego.
    3. Comprobar si la función cutcoin está correctamente definida y se llama cuando el jugador se superpone con la moneda.
    4. Comprobar si hay algún error o registro en la consola que pueda ayudarnos a identificar el problema.

    Dado que el código proporcionado sólo muestra una parte de la lógica del juego, podemos asumir que los pasos anteriores se han completado con éxito. Por lo tanto, podemos centrarnos en los dos últimos pasos mencionados anteriormente.

    En primer lugar, comprobemos si la función cutcoin está correctamente definida y se llama cuando el jugador se superpone con la moneda. Según el código proporcionado, parece que la detección de superposición se realiza correctamente, ya que la función cutcoin se pasa como llamada de vuelta al método overlap. Sin embargo, la función cutcoin está vacía y no contiene ninguna lógica para eliminar el sprite de la moneda de la pantalla del juego.

    Para solucionar el problema, podemos añadir código a la función cutcoin que elimine el sprite de la moneda de la pantalla del juego cuando el jugador se superpone con ella. Por ejemplo, podemos añadir el siguiente código a la función cutcoin:

    function cutcoin(movecoin1, healthGroup) {
      console.log('++++++', moveCoin, healthGroup);
      healthGroup.killAndHide(healthGroup.getFirstAlive());
    }
    

    El método killAndHide elimina el primer sprite vivo del healthGroup y lo oculta. Suponemos que cada sprite de moneda en el healthGroup sólo tiene una vida y desaparece después de que el jugador se superpone a él.

    Por último, también podemos comprobar si hay algún error o registro en la consola que pueda ayudarnos a identificar el problema. Según el código proporcionado, no hay registros ni errores en la consola que puedan ayudarnos a diagnosticar el problema.

    En resumen, para solucionar el problema de que el sprite de la moneda no desaparece cuando el jugador se superpone a él, necesitamos añadir código a la función cutcoin que elimine el sprite de la moneda de la pantalla del juego. Podemos utilizar el método killAndHide para eliminar el primer sprite vivo del healthGroup y ocultarlo.

Comments are closed.