2017-03-24 6 views
0

Ceci est un cas de test simple d'un jeu dans phaser.js. La balle se déplace vers le haut de l'écran, entre en collision, rebondit et s'arrête à cause d'un conditionnel. J'ai défini la valeur et la vélocité du sprite pour l'empêcher de tomber plus loin.Phaser Game Framework - Valeur Sprite.y modifiée dans 2 boucles de mise à jour malgré conditionnel

Cependant, dans la prochaine boucle de mise à jour, la valeur y augmente à nouveau, et l'augmentation de comptage à 2.

De console.log - comme la balle descend y est 437442445, puis reste sur 440. Je ne comprends pas comment ball.y va au-delà de 440 deux fois, c'est tout le code courant. Le réglage du rebond à 0 au conditionnel n'a aucun effet. Ce n'est pas que console.log dans le navigateur n'est pas synchronisé avec la mise à jour de phaser, parce que la variable count signale que le conditionnel est entré deux fois.

var mainState = { 
    preload: function() { 
     game.load.image('ball', 'assets/ball.png'); 
    }, 
    create: function() { 
     game.physics.startSystem(Phaser.Physics.ARCADE); 
     game.world.enableBody = true; 
     ball = game.add.sprite(180, 440, 'ball'); 
     ball.body.bounce.setTo(1); 
     ball.body.allowGravity = false; 
     ball.body.collideWorldBounds = true; 
     game.physics.arcade.moveToXY(ball, 160,10,350); ballstop = false; 
     count = 0; 
    }, 
    update: function() { 
     console.log("ball.y " + ball.y); 
     if (ball.y > 440) { 
     ball.body.bounce.setTo(0); 
     ball.body.velocity.x = 0; 
     ball.body.velocity.y = 0; 
     ball.y = 440; 
     count = count + 1; 
     } 
    }, 
}; 
var game = new Phaser.Game(360, 640); 
game.state.add('main', mainState); 
game.state.start('main'); 
+0

Voici fonctionner https://phaserballtest.netlify.com/ .Look à la console Outils Chrome Dev pour voir le problème – paulito

+0

Juste quelques suppositions de hasard: Est-ce que la physique du jeu en même temps manipulé ou découplée de mainState de ' mettre à jour() '? Y a-t-il une valeur d'accélération qui doit être réglée sur «0»? –

Répondre

0

Essayez reseting the body.

Le bloc concerné ressemblerait à quelque chose comme ceci:

if (ball.y > 440) { 
    ball.body.bounce.setTo(0); 
    ball.body.reset(0, 0); 
    //ball.body.velocity.x = 0; 
    //ball.body.velocity.y = 0; 
    ball.y = 440; 
    count = count + 1; 
} 

J'ai aussi sauvé un JSFiddle avec ce changement.