我正在为自己的Pong克隆编写许多难题,以使自己熟悉SFML和Xcode。对于最困难的困难,我想创建一个AI水平,计算机可以立即知道球的去向。因此,如果我拥有xVelocity和yVelocity,则可以有效地获得斜率。问题是,每当球击中顶部或底部时,yVelocity都会反转。因此,从本质上讲,我有一个代数斜率问题,每当碰到墙时,问题就会相反。

现在,我的屏幕高度为600像素,点击检测的顶部和底部为5像素,从而使空间为590像素。

我的问题:是否有某种公式可以涵盖所有这些因素。例如,假设球以x = 30和y = 240的斜度为1.45击球,我想获得当x = 770时将击中的y值。

让我知道是否可以简化这一点。再说一次,我知道如何计算出如果球反弹4次就说4次,但我想知道是否有办法弄清楚边界处的y速度切换。

谢谢!

最佳答案

编辑:只需阅读您的屏幕实际上是590像素高,这将更改数学但不会更改公式

计算忽略碰撞的球将击中的位置。如果(0,0)是您竞技场的左上角,则取y = mx + b,其中b是您的y偏移(球在y = 240处被击中),而m是您的坡度(1.45)

现在我们想知道x进一步770-30时y等于什么,因此做一下数学运算:

y = (1.45)(740) + (240) = 1313


这显然超出了您的范围。它将反映

y/height = floor(1313/590) = 2 times


表示坡度仍在向上移动,它将撞击到

y mod height = 1313 mod 590 or 133


如果它反映了(floor(y/2) %2 == 1)的奇数次,那么您将必须使用以下内容来计算它

MAX_HEIGHT - (y mod height) = 590 - (1903 mod 590) = 590 - 133 = 457


您可以通过将多个590个高度字段彼此叠加来形象化,其中一个是您开始的位置:

--------------------------------------------------------------------
|
|
|
|                                                 ball ends up here (*)
|                                                                *
|                                                            *
|                                                        *
------------------------(reflection  two)------------*---------------
|                                                *
|                                            *
|                                        *
|                                    *
|                                *
|                            *
|                        *
---------------------*---------(reflection 1)------------------------------
|                *
|            *
|        *
|    *
|*ball hit here
|
|
-----------------------------------------------------------------------


同样的想法应该适用于下降。计算位置,找出反射的数量,使用mod或590-mod确定应该在哪里。

10-06 05:49