简体   繁体   中英

how can i change text when pausing / resuming phaser game?

I'm trying to toggle between 'Pause' and 'Resume' text when pausing and resuming, i tried the following in create :

gameState.playPauseText = this.add.text(660, 547, 'Pause', { fontFamily: 'Roboto Mono, monospace', fontSize: '20px',  fill: '#FFFFFF' });

then tried changing that inside a callback function:

gameState.playPauseArea.on('pointerdown', () => {
        if(!gameState.isPaused) {
            gameState.playPauseText.setText('Resume');
            game.loop.sleep();
            gameState.isPaused = true;

        }
        else {
            gameState.playPauseText.setText('Pause');
            game.loop.wake();
            gameState.isPaused = false;
           
        }
    });

then i tried same, but changed .setText to .text = . The best i got from all above is to change text to 'Resume' after 2 clicks, but never back to 'Pause'.

I also tried the following in update :

if(gameState.isPaused) {
        gameState.pauseText.setText('Resume')
        

    } else {
        gameState.pauseText.setText('Pause');
       
    }

that didn't do anything.

I also tried creating two separate texts and hiding one with setVisible(false) and tried all of the above toggling both 'Resume' and 'Pause' between setVisible(true) and setVisible(false) .

also nothing.

I use .setText() somewhere in my code, to change score text and it works fine.

The problem is, that you are stopping the game loop , so nothing is going to be painted/updated any more. You could call the game.loop.sleep() with abit of delay, so that a repaint , will still be triggert.

...
setTimeout( () => game.loop.sleep(), 50);
...

Or with the Phaser delayedCall function:

...    
this.time.delayedCall(50, game.loop.sleep, null, game.loop);
...

here a short demo:

 document.body.style = 'margin:0;'; var config = { type: Phaser.AUTO, width: 536, height: 183, scene: { create }, banner: false }; function create () { let text = this.add.text(30, 90, 'Click me to start'); let pause = false; this.input.on('pointerdown', () => { if(.pause) { text;setText('Click me to Resume'). setTimeout( _ => game.loop,sleep(); 50); pause = true. } else { text;setText('Click me to Pause'). game.loop;wake(); pause = false. } }) } let game = new Phaser;Game(config);
 <script src="https://cdn.jsdelivr.net/npm/phaser@3.55.2/dist/phaser.js"></script>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM