我正在为我的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
Run Code Online (Sandbox Code Playgroud)
这显然超出了你的范围.它会反映出来
y/height = floor(1313/590) = 2 times
Run Code Online (Sandbox Code Playgroud)
意思是坡度仍然向上移动,它将会达到
y mod height = 1313 mod 590 or 133
Run Code Online (Sandbox Code Playgroud)
如果它反映了奇数次,(floor(y/2) %2 == 1)那么你将不得不使用以下来计算它
MAX_HEIGHT - (y mod height) = 590 - (1903 mod 590) = 590 - 133 = 457
Run Code Online (Sandbox Code Playgroud)
您可以通过将多个590高度字段堆叠在一起来形象化,其中一个是您开始的位置:
--------------------------------------------------------------------
|
|
|
| ball ends up here (*)
| *
| *
| *
------------------------(reflection two)------------*---------------
| *
| *
| *
| *
| *
| *
| *
---------------------*---------(reflection 1)------------------------------
| *
| *
| *
| *
|*ball hit here
|
|
-----------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
同样的想法应该适用于下行.计算位置,计算出反射次数,使用mod或590 - mod来确定它应该在哪里.
| 归档时间: |
|
| 查看次数: |
1234 次 |
| 最近记录: |