Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pygame中曲线碰撞检测的实现_Python_Python 3.x_Math_Pygame - Fatal编程技术网

Python pygame中曲线碰撞检测的实现

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测试。

我用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
在曲线附近,代码可以进行进一步的测试。根据曲线的大小/复杂度/形状,将线拆分为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])