【问题标题】:Make entity bounce off according to angle and speed根据角度和速度使实体反弹
【发布时间】:2012-08-16 08:01:27
【问题描述】:

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

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

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

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 等属性。 this 对象具有相同的属性并且是桨。

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

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

【问题讨论】:

  • 只是盲目猜测:player.vel.x = newVel * paddle.vel.x。为了让修修补补更容易,您能否在jsfiddle.net 上进行现场演示?
  • 我无法主持现场演示,因为 ImpactJs 的来源需要购买,我认为出版商不会批准 :)
  • 旧的突围游戏还根据实体击球的位置设置速度。因此,如果桨是静止的并且它击中最右边,它就会射出最右边。您是否也想将其纳入您的方程式中?
  • @EvanKennedy,是的,请
  • 我正在尝试在给定的有限上下文中理解您的代码。首先,变量playerthis 在给定上下文中的含义是什么。

标签: javascript impactjs


【解决方案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;

第一行计算玩家的位置相对于球拍的位置,第二行将其代入-11 之间的比率,然后乘以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;
}

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

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

【讨论】:

  • 谢谢你,但是角度呢?因此,当我的实体击中桨时,我需要它根据它击中的桨上的位置进行反映。所以我的玩家“y”需要反映这一点
猜你喜欢
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多