0

我想要做的是将一个实体从桨上弹起,并让它对桨的速度做出反应。

所以就像在旧的突围游戏中一样,你移动桨的速度越快,角度就越钝。

到目前为止我所拥有的是这个;

var playerPos = player.pos.x - paddle.pos.x;
var relativePos = Math.floor(player.pos.x - this.pos.x + (player.size.x / 2));
var angle = relativePos * (Math.PI / paddle.size.x);
var newVel = Math.cos(angle);

player.vel.x = newVel;

我的数学不像以前那样。

编辑

Player 是一个实体,具有 size.x 和 size.y、pos.x 和 pos.y、velocity.x 和 velocity.y 等属性。这个对象具有相同属性并且是桨。

如果你愿意,球员就是球。

所以你移动桨,它在 y 维度中的位置被设置,你在 x 中移动它。

4

1 回答 1

1

你没有在你的帖子中提到这一点,但我假设你不想改变速度,如果它没有撞到桨,所以让我们创建一个 if 函数来包装我们整个改变速度的代码:

if(paddle.x + paddle.size > player.x && player.x + player.size > paddle.s){
    //Code to be ran to change velocity
}

这仅适用于玩家在底部是正方形的情况。如果您只想离开播放器的中间而不是边缘,请运行以下代码:

if(paddle.x + paddle.size > player.x + (player.size/2) && player.x + (player.size/2) > paddle.x){
    //Code to be ran to change velocity
}

现在我们知道玩家实际上击中了球拍,让我们调整它击中球拍的速度。你可以用很多不同的方式来做到这一点(如果你想要不同的方式,请告诉我),但我会通过根据它击中桨的位置创建一个速度并将当前速度添加到它来做到这一点。我的范围跨度从-55

player.vel.x += (player.x + (player.size/2) - paddle.x + (paddle.size/2)) /
                (paddle.size/2) * 5;

第一行计算玩家的位置相对于球拍的位置,第二行将其放入 和 之间的比率,-1并将1其乘以5。所有这些都添加到当前速度中。该变量5应根据您的喜好进行更改。

最后要做的是调整桨的速度。只要你不打算让桨对整体速度产生或多或少的影响,这应该真的很容易。

player.vel.x += paddle.vel.x;

非常简单的代码就是你真正需要的。

所以把它们放在一起:

if(paddle.x + paddle.size > player.x + (player.size/2) && player.x + (player.size/2) > paddle.x){
    player.vel.x += (player.x + (player.size/2) - paddle.x + (paddle.size/2)) /
                    (paddle.size/2) * 5 + paddle.vel.x;
}

非常简单的代码,不需要三角函数。(耶!)

如果您希望对此进行更改,我可以提供帮助,因为我实际上非常了解数学,我只是想简化它,因为我不确定它是否真的需要更高级。

于 2012-08-21T01:37:42.637 回答