Javascript SetAngularVelocity不会立即运行
我正在创造一个我正在学习的游戏。。。使用Box2D,我有一个球员,一个球和一个高高的盒子,放在球员下面 当用户点击/触摸/点击键盘上的一个键时;在第一次点击时,玩家应该跳起来,在第二次点击时,高盒子应该向右旋转 我在输入处理函数中轻松解决了这一问题:Javascript SetAngularVelocity不会立即运行,javascript,box2d,Javascript,Box2d,我正在创造一个我正在学习的游戏。。。使用Box2D,我有一个球员,一个球和一个高高的盒子,放在球员下面 当用户点击/触摸/点击键盘上的一个键时;在第一次点击时,玩家应该跳起来,在第二次点击时,高盒子应该向右旋转 我在输入处理函数中轻松解决了这一问题: var numClicks = 0; var handleInput = function () { numClicks++; if (numClicks == 1) { Game.player.jump();
var numClicks = 0;
var handleInput = function () {
numClicks++;
if (numClicks == 1) {
Game.player.jump();
}
else if (numClicks == 2) {
Game.launcher.launch();
}
else {
Game.player.flap();
}
};
正如你所看到的,在第一次点击/触摸/无论什么,玩家都会跳起来,第二次发射器发射/开始旋转,然后玩家会拍打翅膀。所有这些都是为了澄清
我遇到的问题非常奇怪。发生的情况是,如果我通过单击来启动玩家,然后在玩家达到其峰值高度之前,我再次单击,发射器将立即开始旋转
但是,如果我通过单击来启动玩家,然后等待玩家达到峰值并开始向下移动,然后再次单击以启动发射器的旋转,那么发射器将不会开始旋转,直到玩家接触到地面
这到底是怎么回事?我不知道他们是怎么联系起来的。。。如果我放一个控制台。记录“启动”;在调用旋转发射器的旁边,我收到了控制台调用,但是旋转拒绝在玩家接触地面之前开始,如果且仅当我在玩家再次开始向下移动后启动旋转
您可以在此处亲自查看:
试着快速点击两次,发射器应该开始旋转并击退玩家。然后试着更慢地点击,特别是等待玩家开始下降,并注意发生了什么
有很多代码,但是与此相关的内容可以在这里找到:
手柄输入功能线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();
}
};
播放器活门功能行25:
发射器发射功能线28:
我是怎么卷入这件事的P因此,显然SetAngularVelocity与ApplyImpulse或ApplyTorque不同,它不会唤醒对象,因此新的速度在对象唤醒之前不会持续
这就是为什么在双击时,它启动的对象仍然从玩家触摸它的时候醒来,但在较慢的双击时,对象已经睡着了,直到玩家再次触摸它才会醒来 只需在调用SetAngularVelocity之前设置body.setawakerue即可解决此问题this.flap = function () {
this.body.ApplyImpulse(new b2Vec2(0, -12 * this.energy), this.body.GetWorldCenter());
this.energy = this.energy / 2;
};
this.launch = function () {
this.body.SetAngularVelocity(10);
};