【问题标题】:Basic Breakout Scaling Maths基本突破缩放数学
【发布时间】:2017-01-24 08:41:39
【问题描述】:

我目前正在开发一款突破性游戏,但遇到了一道数学题。这是场景。

球有一个水平速度,名为 bxspd。 球有一个名为 bx 的 X 坐标。 球有一个最大速度,命名为 bspd。 蝙蝠有 x 坐标,命名为 px。

当球与球棒碰撞时,它需要在相对于球棒位置的水平方向上反弹。换句话说:

//碰撞事件 bxspd = bx - px。

这样,当球击中球棒的左侧时,球会弹回左侧。距离球棒中心越远,水平速度越快向左。

问题是我的球棒从中心到每边的宽度为 50。如何将其缩放到球的最大速度?所以换句话说,如果它击中球棒的最左角,bxspd 会变为 -2 而不是 -50?

问候, 克拉丽斯

【问题讨论】:

  • 在写下这个问题时,我设法弄明白了。 px原点是蝙蝠的左边,所以我设计了以下公式:bdx = ((bx - (px + (pwidth / 2))) / (pwidth / 2)) * bspd;
  • 然后随意删除问题
  • 感谢 mplungjan 的建议。我认为将公式编写为问题的答案会更有利可图,以便人们在遇到相同问题时可以将其用作参考。
  • 当然可以。它似乎非常适合您的问题...

标签: javascript math physics


【解决方案1】:

写完问题后,不知何故点击到位,所以这里是为需要它的人提供的解决方案。

bdx = ((bx - (px + (pwidth / 2))) / (pwidth / 2)) * bspd;

bdx 是球的 xspeed。 bx 是球的 xposition。 px 是蝙蝠的 xposition。 pwidth 是蝙蝠的宽度。 bspd是球的最大速度变量,所以bdx是相对于最大球速(bspd)计算的。

请注意,此公式也适用于偏移量。原因是玩家的 X 位于球棒的最左侧。所以要找到中心,我们将 pwidth / 2 添加到播放器的 x 以找到中心。

【讨论】:

  • 你有独立的 x 和 y 最大速度吗?
  • 我希望我没有误解你的问题,但这里是。游戏开始时 bspd 默认为 2。这个数字将您的球 xspeed 限制为 2,并将 yspeed 限制为 2,而不是它们的组合速度。如果我误解了这个问题,请告诉我。
  • 但是对角飞行的球可以以2.82的速度飞行,这不觉得很奇怪吗?据我了解,您应该限制绝对速度,而不是单独限制 x 轴和 y 轴
  • 这确实是一个很好的观察,我仍然需要弄清楚我将如何做到这一点。我习惯使用 GameMaker Studio,其中有一个名为 speed 的内置变量,因此限制绝对速度就像“speed = min(speed, maxspeed);”一样简单。有什么建议可以让我朝着正确的方向前进吗?
  • 我从来没有用过 GameMaker Studio,所以我帮不了你。但我对每个刻度的策略是应用所有加速度,然后检查结果速度是否高于最大值。如果是,请减少它。
【解决方案2】:

假设如果球击中球棒的右外侧边缘,那么它会获得额外的速度extrabatspeed,在中心它得到 0,在左边它得到-extrabatspeed。球棒的宽度为batwidth,它在batcollisionx 处与球碰撞,其值介于0 和batwidth 之间。我假设 x 轴从左到右。

那么你可以将ballspeedx的变化计算为2 * extrabatspeed * ballcollisionx / batwidth - extrabatspeed

碰撞时ballspeedy 变为负数。

限制球速应该在之后进行。将速度计算为sqrt(x^2 + y^2),并将 x 和 y 校正相同的因子。

【讨论】:

  • 感谢您的帮助。发布问题后,我设法创建了一个公式。不过你的数学更容易阅读,所以下次我会记住它。
猜你喜欢
  • 1970-01-01
  • 2019-09-17
  • 2022-06-22
  • 1970-01-01
  • 2012-06-13
  • 2016-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多