Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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 在没有精灵的基本乒乓球游戏中,我该如何检测球拍和球之间的碰撞_Python_Pygame_Collision Detection_Pong - Fatal编程技术网

Python 在没有精灵的基本乒乓球游戏中,我该如何检测球拍和球之间的碰撞

Python 在没有精灵的基本乒乓球游戏中,我该如何检测球拍和球之间的碰撞,python,pygame,collision-detection,pong,Python,Pygame,Collision Detection,Pong,对于我的Dofe Gold,我在pygame中创建了一个乒乓球游戏,因为这是我第一次使用pygame,我没有使用精灵,因为我没有想到这一点。我现在想要一个解决方案,它允许我解决我的问题,而不必完全用sprite重写我的代码。注意:我希望这仍然是我的代码,所以我不会接受其他人重写的解决方案,因为这会带走任何成就感。非常感谢。 我的代码: 导入pygame 随机输入 全球水平 运行=真 def pong(): 全球运行 碰撞=0 pygame.init() 屏幕=(600600) window=py

对于我的Dofe Gold,我在pygame中创建了一个乒乓球游戏,因为这是我第一次使用pygame,我没有使用精灵,因为我没有想到这一点。我现在想要一个解决方案,它允许我解决我的问题,而不必完全用sprite重写我的代码。注意:我希望这仍然是我的代码,所以我不会接受其他人重写的解决方案,因为这会带走任何成就感。非常感谢。 我的代码:

导入pygame
随机输入
全球水平
运行=真
def pong():
全球运行
碰撞=0
pygame.init()
屏幕=(600600)
window=pygame.display.set_模式((屏幕))
pygame.display.set_标题(“Pong”)
x=300
y=590
坐标=(300150)
宽度=175
高度=10
级别=10-选择
velx=10
F=10
当run==True时:
pygame.时间延迟(100)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
keys=pygame.key.get_pressed()
如果键[pygame.K_LEFT]和x>0:
x-=水平
elif键[pygame.K_RIGHT]和x600-35:
velx=-velx

elif coords[0]由于您不需要任何代码,下面介绍如何用文字表达

编写一个名为的函数,比如说
ballHits()

桨叶坐标
、球
坐标
和球半径
35
传递给功能?as
radius

在这个新函数中,
paileCoords
定义了一个矩形。代码需要检查球的边缘是否在此矩形内

一种简单的方法是计算出一个围绕球的矩形(正方形)的坐标。由于球是从中心涂漆的,因此大致如下:

[ coords.x - radius,  coords.y - radius,  2 * radius, 2 * radius ]
# the [ x, y, width, height] of a square covering a circle
使用PyGame的
rect
类,确定两个矩形是否重叠

一种非简单的实现方法是为形成球的圆预生成边缘像素列表。也许可以使用类似的,以
(0,0)
为中心的,为您提供一个可以使用当前球坐标调整的点列表

使用挡板矩形和PyGame的
rect
类确定当偏移到当前球位置时,这些点是否与挡板碰撞。这将为您提供真实的碰撞,而不是近似值,并且对于角到角的碰撞效果更好。首先使用上述方形方法检查粗略碰撞,然后检查多个圆点,可能会更快

如果代码确定存在冲突,则从函数返回
True
,否则返回
False


在主代码中,调用此函数,并对返回的结果执行操作。

现在我从未使用过pygame,对此无能为力,但是:我认为global不会像您所认为的那样做。我想您想将
vel
声明为全局变量?如果是这样的话:不需要全局,但请考虑使它成为<代码> VIE./CUT>(请参阅这里的随机实际操作),在这里,您可能想命名它<代码> VEL>代码>参见“常数”,如果您在短语“Python碰撞检测”上搜索,您将发现资源,它可以解释得比我们在这里的答案要好得多。另外,请注意,您已经实现了球和墙之间的碰撞检测。简单地将其适应于球和桨。
[ coords.x - radius,  coords.y - radius,  2 * radius, 2 * radius ]
# the [ x, y, width, height] of a square covering a circle