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
window.addEventListener('resize', () => {
game.resize(window.innerWidth, window.innerHeight);
});
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.
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)