Python pygame中曲线碰撞检测的实现
我用python编写了一个类,该类将随机生成一条末端带有曲线的直线。我使用两个变量向类中添加了移动:xChange和yChange。我试图通过计算y值(testY)将碰撞检测添加到曲线中,y值是通过重新排列椭圆方程((x-h)^2/a^2+(y-k)^2/b^2=1)得到的Python pygame中曲线碰撞检测的实现,python,python-3.x,math,pygame,Python,Python 3.x,Math,Pygame,我用python编写了一个类,该类将随机生成一条末端带有曲线的直线。我使用两个变量向类中添加了移动:xChange和yChange。我试图通过计算y值(testY)将碰撞检测添加到曲线中,y值是通过重新排列椭圆方程((x-h)^2/a^2+(y-k)^2/b^2=1)得到的 如果playerC[0]>=self.x1和playerC[0]这个答案基于这样一个想法,即曲线是一些随机弯曲的线段 我将首先计算曲线的边界框,使用该边界框最初执行一个快速有效的Do it collide at all测试。
如果playerC[0]>=self.x1和playerC[0]这个答案基于这样一个想法,即曲线是一些随机弯曲的线段
我将首先计算曲线的边界框,使用该边界框最初执行一个快速有效的Do it collide at all测试。如果玩家没有与边界框碰撞,则无需进一步测试
现在已经确定playerC
在曲线附近,代码可以进行进一步的测试。根据曲线的大小/复杂度/形状,将线拆分为N个子线(例如8?)可能是有效的,然后使用边界框对玩家的这些部分进行测试。如果需要高精度,则针对曲线的像素(或其他子线)进行进一步测试
这种类型的拆分和测试通常通过一个。使用四叉树模拟上述过程。它可以快速找到碰撞测试的相关部分,这意味着代码不会花费大量时间处理数千个点
如果所有这些都失败,则生成直线的点列表,并根据玩家的边界框测试这些点(加上移动偏移量)。这个答案基于曲线是随机弯曲的线段的想法
我将首先计算曲线的边界框,使用该边界框最初执行一个快速有效的Do it collide at all测试。如果玩家没有与边界框碰撞,则无需进一步测试
现在已经确定playerC
在曲线附近,代码可以进行进一步的测试。根据曲线的大小/复杂度/形状,将线拆分为N个子线(例如8?)可能是有效的,然后使用边界框对玩家的这些部分进行测试。如果需要高精度,则针对曲线的像素(或其他子线)进行进一步测试
这种类型的拆分和测试通常通过一个。使用四叉树模拟上述过程。它可以快速找到碰撞测试的相关部分,这意味着代码不会花费大量时间处理数千个点
如果所有这些都失败,请生成线的点列表,并根据玩家的边界框测试这些点(加上移动偏移量)。到底是什么问题?从描述上看不清楚。您提供的代码是一个良好的开端,但不包含任何碰撞检测,只包含绘图。清楚地了解您从当前代码中观察到的内容以及您期望的内容。到底是什么问题?从描述上看不清楚。您提供的代码是一个良好的开端,但不包含任何碰撞检测,只包含绘图。清楚地了解您从当前代码中观察到的内容以及您的期望。
if playerC[0] >= self.x1 and playerC[0] <= self.x4:
#Tests if the player coords are the same as the curves Y
testY = self.k + (self.b*math.sqrt(self.a**2-self.h**2+2*self.h*playerC[0]-playerC[0]**2))/self.a
pygame.draw.line(gameDisplay, WHITE, [0, testY ], [1000, testY])