2017-03-24 7 views
0

이것은 phaser.js의 게임에서 간단한 테스트 사례입니다. 볼이 화면 상단으로 이동하고, 충돌하고, 튀어 오르고, 조건 때문에 멈추고, 스프라이트의 y 값과 속도를 설정하여 더 이상 떨어지지 않게합니다.Phaser Game Framework - 조건부에도 불구하고 2 개의 업데이트 루프에서 Sprite.y 값이 변경됨

그러나 다음 업데이트 루프에서, CONSOLE.LOG 2.

에 다시 y 값이 증가하고, 카운트 증가 - 공 y는 다음 437,442,445입니다 이해가 안 (440)에 남아 내려으로 ball.y가 440을 두 번 넘는 방식은 전체 실행 코드입니다. 조건부에서 바운스를 0으로 설정하면 효과가 없습니다. 그것은 콘솔이 아닙니다. 브라우저의 로그는 페이저 업데이트와 동기화되지 않습니다. 왜냐하면 카운트 변수가 조건부를 두 번 입력했기 때문입니다.

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

는 문제 – paulito

+0

그냥 어떤 임의의 추측을 볼 크롬 개발 도구의 콘솔에서 https://phaserballtest.netlify.com/ .Look을 실행중인 update()'? 가속 값이 '0'으로 설정되어야합니까? –

답변

0

reseting the body을보십시오.

관련 블록은 다음과 같이 보일 것입니다 :

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; 
} 

내가이 변화와 JSFiddle을 저장 한. 게임 물리학가 동시에 처리 또는 mainState의`에서 분리하고 있습니까 : 여기