我正在为我的Pong克隆编写一些困难,我正在编写以熟悉SFML和Xcode。对于最难的难度,我想创建一个AI级别,在这个级别上,计算机可以立即知道球将去哪里。所以,如果我有我的xVelocity和yVelocity,我可以有效地得到斜率。问题是,每次球打到顶部或底部,yVelocity就会反转。所以从本质上讲,我有一个代数斜率问题,每当墙被击中时,它都会做相反的事情。
现在,我的屏幕高度是600像素,命中检测在顶部和底部是5像素,空间是590像素。
我的问题是:有没有包含所有这些因素的公式。比方说,球在x= 30,y= 240,斜率为1.45的情况下被击中,我想得到当x=770时,它将被击中的y值。
如果我可以简化这件事,请告诉我。再一次,我知道如何通过计算它,比方说,如果球弹了4次,4次,但我想知道是否有一种方法可以计算出,在边界处有y速度开关。
谢谢!
发布于 2012-07-13 06:10:21
编辑:只读你的屏幕实际上是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来确定它应该在哪里。
发布于 2012-07-13 05:59:40
我没有试过,但是如果你知道它在“y轴”上的位置和斜率,你就会有一个斜率截距公式。插入到另一边的距离,你就可以知道它是在屏幕上方、下方还是内部。如果它会高于或低于,计算当y到达顶部或底部时,x将是多少,从总x中减去,然后重复。
发布于 2014-08-09 13:17:01
如果你遇到了数学问题,这里是一个编程上不那么优雅(也更慢,在大多数pong实现中无关紧要)的解决方案:
tempX = ball.x;
tempY = ball.y;
tempXVel = ball.hspeed;
tempYVel = ball.vspeed;
while(tempX < x) //Assumes ball is traveling at you and you are right paddle
{ //in a X = 0 = left hand side scenario
tempX += tempXVel;
tempY += tempYVel;
if (tempY > 480 or tempY < 0)
tempYVel *= -1; //Y Velocity Switch at boundaries
}
target_Y = tempY;基本上,只需在循环中对球执行相同的逻辑,然后将其设置为您的目标。
https://stackoverflow.com/questions/11461249
复制相似问题