我使用Box2D创建了一个“游戏”(我在学习......),并且我有一个玩家(一个球)和一个位于玩家之下的高箱子。SetAngularVelocity不会立即运行
当用户点击/触摸/击中键盘上的按键;在第一次点击时球员应该跳起来,第二次球员应该向右旋转。
我已经在我的输入处理功能,轻松解决了这个:
var numClicks = 0;
var handleInput = function() {
numClicks++;
if (numClicks == 1) {
Game.player.jump();
}
else if (numClicks == 2) {
Game.launcher.launch();
}
else {
Game.player.flap();
}
};
正如你所看到的,在第一次点击/触摸/不管,球员跳起来,第二启动器启动/启动旋转之后,玩家拍打他的翅膀。所有这些工作都很清楚。
我遇到的问题是(imo)非常奇怪。发生的是,如果我通过点击启动玩家,然后,在玩家达到他的高峰时,我再次点击,发射器将立即开始旋转。但是,如果我通过点击启动播放器,然后等到播放器达到高峰并开始向下行驶,然后再次单击(启动发射器的旋转),发射器将不会开始旋转,直到播放器触及地面。
这到底是怎么回事?我不知道他们是如何连接的...如果我把console.log('Launch');在轮到发射器的呼叫旁边,我接到控制台呼叫,但是旋转拒绝在玩家接触地面之前开始IF(并且只有)我在玩家开始再次下降后开始旋转。
您可以看到自己的位置:http://31.192.226.6/flappy/
试着点击两次迅速和“启动”应该开始旋转和冲床的球员了。然后尝试点击更慢(特别是等待玩家开始下去)并注意会发生什么。
有相当大量的代码,但与此有关的东西都可以在这里找到:
处理输入功能https://github.com/powerbuoy/FlappyMatteo/blob/master/js/09-game.js线109: //处理输入 VAR numClicks = 0;
var handleInput = function() {
numClicks++;
if (numClicks == 1) {
Game.player.flap();
}
else if (numClicks == 2) {
Game.launcher.launch();
}
else {
Game.player.flap();
}
};
球员瓣功能https://github.com/powerbuoy/FlappyMatteo/blob/master/js/02-player.js线25:
this.flap = function() {
this.body.ApplyImpulse(new b2Vec2(0, -12 * this.energy), this.body.GetWorldCenter());
this.energy = this.energy/2;
};
发射器发射功能https://github.com/powerbuoy/FlappyMatteo/blob/master/js/02-launcher.js线28:
this.launch = function() {
this.body.SetAngularVelocity(10);
};
怎么会有我自己得到这个? :P