web-dev-qa-db-fra.com

Phaser 3. Changer les dimensions du jeu pendant l'exécution

Bonjour, aidez-moi à découvrir comment créer un jeu vraiment réactif avec Phaser3.

La réactivité est essentielle car le jeu (couche de représentation de l'espace de travail Blockly) devrait pouvoir être agrandi à l'écran et réduit plusieurs fois au cours de la session.

La question est: comment puis-je changer les dimensions du jeu en cours d'exécution?

--- édité ---

ce

game.renderer.resize(window.innerWidth, window.innerHeight, 1.0);

n'affecte pas le jeu lui-même, il ne change que la taille de la toile, par exemple, les objets dont l'indicateur setCollideWorldBounds est défini sur true utilisent toujours la taille initiale du monde :(

Enfin, cet exemple fonctionne à 100% ok labs.phaser.io

4
bFunc
window.addEventListener('resize', () => {
    game.resize(window.innerWidth, window.innerHeight);
});
5
ofelixx4

Redimensionnez le rendu comme vous le faites, mais vous devez également mettre à jour les limites du monde, ainsi que éventuellement celles de la caméra.

// the x,y, width and height of the games world
// the true, true, true, true, is setting which side of the world bounding box
// to check for collisions

this.physics.world.setBounds(x, y, width, height, true, true, true, true);

// setting the camera bound will set where the camera can scroll to
// I use the 'main' camera here fro simplicity, use whichever camera you use

this.cameras.main.setBounds(0, 0, width, height);

et c'est ainsi que vous pouvez définir la limite du monde de manière dynamique.

3
Coned_Stoding

Juste au cas où quelqu'un aurait encore ce problème, j'ai découvert que redimensionner le jeu ne fonctionnait pas pour moi et que la physique ne faisait rien dans mon cas. 

Pour que cela fonctionne, il me fallait redimensionner le jeu ainsi que le la fenêtre de la scène (vous pouvez obtenir la scène via le scénemanager qui est une propriété du jeu):

game.resize(width,height)
scene.cameras.main.setViewport(0,0,width,height)
0
jcbdrn