Javascript SetAngularVelocity不会立即运行

Javascript SetAngularVelocity不会立即运行,javascript,box2d,Javascript,Box2d,我正在创造一个我正在学习的游戏。。。使用Box2D,我有一个球员,一个球和一个高高的盒子,放在球员下面 当用户点击/触摸/点击键盘上的一个键时;在第一次点击时,玩家应该跳起来,在第二次点击时,高盒子应该向右旋转 我在输入处理函数中轻松解决了这一问题: var numClicks = 0; var handleInput = function () { numClicks++; if (numClicks == 1) { Game.player.jump();

我正在创造一个我正在学习的游戏。。。使用Box2D,我有一个球员,一个球和一个高高的盒子,放在球员下面

当用户点击/触摸/点击键盘上的一个键时;在第一次点击时,玩家应该跳起来,在第二次点击时,高盒子应该向右旋转

我在输入处理函数中轻松解决了这一问题:

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