我想要做的是将一个实体从桨上反弹并让它对桨的速度做出反应。
就像在旧的比赛中一样,你移动球拍的速度越快,角度越钝。
到目前为止我的是这个;
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中移动它。
答案 0 :(得分:1)
你在帖子中没有提到这个,但我假设你想要不改变速度,如果它没有击中桨,那么让我们做一个包含我们整个速度变化代码的if函数: / p>
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
}
现在我们知道球员实际上击中了球拍,让我们调整它击中球拍的速度。你可以通过许多不同的方式做到这一点(请告诉我你是否需要不同的方式),但我会通过根据它击中桨的位置创建一个速度并将当前速度添加到它来实现。我的范围将从-5
到5
。
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;
}
非常简单的代码,不需要三角函数。 (耶!)
如果您希望改变这一点,我可以帮助,因为我实际上非常了解数学,我只是想简化它,因为我不确定它是否真的需要更高级。