【问题标题】:Need better way of making the ball angle in pong game在乒乓球比赛中需要更好的打球角度的方法
【发布时间】:2012-07-30 11:10:57
【问题描述】:

我正在制作一个 pong 克隆来练习我的编码,但我一直坚持让球在被球拍击中时能够改变角度。

我当前的实现有一个球的 deltaX 和 deltaY,它们随着游戏循环移动以移动球。我这样做的方式是,如果您在球拍移动时击球,deltaY 会根据球拍的方向增加或减少,但这对于游戏来说一点也不自然。

有人知道更好的方法吗?

【问题讨论】:

  • 请提供SSCCE(短,自包含,正确示例)
  • 在纸上画出来:如果一个球以 90 度角撞击会发生什么? 45岁做什么? -30 是什么?然后写一个转换这个角度的函数。
  • 如何定义角度?从桨还是从普通到桨?
  • 正如我所说,我有一个球的 delta X 和 delta Y,所以如果 deltaX 为 3 且 deltaY 为 1,它在 x 中移动 3 个像素,在 Y 中移动 1 个像素。我不是真正计算角度本身,因为我希望它是动态的,并且许多角度不仅仅是 30/60 或 45s。我的问题在于以适当的方式更改 deltaY,以使其感觉自然而不像它那样糟糕。

标签: java pong


【解决方案1】:

我要做的第一件事是将 deltaX 和 deltaY 更改为 ballAngle 和 deltaSpeed。这样你就可以从直角坐标系移动到极坐标系。由于球运动的性质(直线运动并在每次撞击时改变线的角度),这将使您的工作更轻松。从现在开始,您只需更改 ballAngle 即可更新球的方向。

但是,您必须更新绘制球的函数,使其从极坐标移回直角坐标,以便将其显示在屏幕上。一点高中三角学可以让你根据你的角度和速度计算屏幕位置增量:

newPosition = oldPosition + movementVector

与:

movementVector.x = deltaSpeed*cos(ballAngle)
movementVector.y = deltaSpeed*sin(ballAngle)

当然,这些方程式可能需要根据您测量的球的角度进行一些修改。

现在要在每次与球拍碰撞时修改球的角度,您只需要根据球拍接触球拍的哪个部分来增加或减少球的角度,并且绘图函数中的数学应该负责更新实际的 x 和 y 位置。

我希望这会有所帮助。

【讨论】:

  • 这听起来是个好主意。谢谢!
  • 您可以计算碰撞后的新角度,只需将实际角度减去 360 度(假设 0º 是正确的方向)。此外,如果您的桨正在移动,您可以修改它。也就是说,如果在碰撞的那一刻,球拍向右移动,球会在一定程度上向左移动。
  • 减去 360 会使其走向相反的方向,但非常不切实际。最理想的情况是,您想弄清楚球以哪个角度撞击桨叶并相对于桨叶的法线进行镜像。有点像反射,相对于法线镜像。现在他想做的是根据击球的位置来进一步倾斜这个角度,这对于普通的砖块破坏或乒乓球游戏来说是标准的。
  • 今天,我原本打算让它根据桨是否移动来改变角度,但我喜欢你关于根据球击中桨的位置来改变角度的想法。这是标准乒乓球的工作原理吗?
  • 如果有人想看比赛结果,zaiber.thepinkbananas.com/ZaiberPong.jar
猜你喜欢
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-07
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
相关资源
最近更新 更多