web-dev-qa-db-fra.com

Phaser.io 3: Obtenez la taille du jeu dans la scène

Cela semble être une question simple, mais je ne peux tout simplement pas la résoudre:

J'utilise le cadre de jeu HTML5 Phaser.io 3 avec les classes ES6, et j'essaie de déterminer la "taille du jeu" réelle (ou la taille du canevas/de la fenêtre d'affichage), afin de pouvoir centrer un objet à l'écran:

class Scene1 extends Phaser.Scene {
    constructor(config) {
        super(config);
    }

    preload() {
        this.load.image('ship', 'assets/spaceship3.png');
    }

    create() {

        let ship = this.add.Sprite(160,125, 'ship');
        // Here I need to figure out the screen width / height:
        // ---> How do I achieve that?
        ship.setPosition(width / 2, height / 2);
    }
}

Je n'ai pas trouvé de moyen de lire ou de calculer la taille réelle de la fenêtre d'affichage/du canevas. Des indices?

6
Alex Schenkel

Vous pouvez utiliser la caméra par défaut:

ship.setPosition(this.cameras.main.centerX, this.cameras.main.centerY);

De la documentation de l'API Phaser 3 sur Camera :

Les caméras, par défaut, sont créées à la même taille que votre jeu, mais leur position et leur taille peuvent être réglées sur n'importe quoi.

1
James Skemp

Dans une scène, dans les méthodes preload() et create() (not dans le constructeur), vous pouvez accéder à l'élément canvas avec this.sys.game.canvas. Donc, pour obtenir la taille de la toile, vous pouvez faire:

create() {
    let { width, height } = this.sys.game.canvas;
}

Pour ma part j'aime ajouter le code suivant pour faciliter l'accès au canevas:

preload() {
    this.canvas = this.sys.game.canvas;
}
2
yolenoyer