Python 如何在pygame中检测两个矩形对象或图像之间的碰撞

Python 如何在pygame中检测两个矩形对象或图像之间的碰撞,python,pygame,collision-detection,Python,Pygame,Collision Detection,我正在做一个游戏,玩家必须用一个碗来接住掉落的物品。我在列表中有一些物品的图像,还有一个用来收集物品的碗的图像。项目持续下降,如果到达边界(底部边缘),则会重置到屏幕顶部。我完成了这个逻辑,允许物品掉落,但我不知道如何检测碗和物品之间的碰撞 我的代码: 导入数学 导入pygame 随机输入 pygame.init() 显示宽度=800 显示高度=600 game\u display=pygame.display.set\u模式((显示宽度、显示高度)) clock=pygame.time.clo

我正在做一个游戏,玩家必须用一个碗来接住掉落的物品。我在列表中有一些物品的图像,还有一个用来收集物品的碗的图像。项目持续下降,如果到达边界(底部边缘),则会重置到屏幕顶部。我完成了这个逻辑,允许物品掉落,但我不知道如何检测碗和物品之间的碰撞

我的代码:

导入数学
导入pygame
随机输入
pygame.init()
显示宽度=800
显示高度=600
game\u display=pygame.display.set\u模式((显示宽度、显示高度))
clock=pygame.time.clock()
pygame.display.set_标题(“接球”)
白色=(255,255,255)
黑色=(0,0,0)
红色=(255,0,0)
蓝色=(0,255,0)
player\u img=pygame.image.load(“Images/soup.png”)
thing_imgs=[pygame.image.load('Images/muffin.png'),pygame.image.load('Images/suffin.png'),
pygame.image.load('Images/cheese.png')、pygame.image.load('Images/fruit.png')]
def播放器(x,y):
游戏显示。blit(玩家(x,y))
定义内容(x、y、img):
游戏显示。blit(img,(x,y))
def game_loop():
运行=真
x=显示宽度*0.45
y=显示高度*0.8
x_变化=0
播放器宽度=64
球员身高=64
things_cor=[[random.randint(0,显示宽度),32]]
添加的事物=[随机选择(事物)
物体高度=32
宽度=32
y_变化=5
捕获=0
运行时:
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_左:
x_变化=-5
如果event.key==pygame.K_RIGHT:
x_变化=5
如果event.type==pygame.KEYUP:
如果event.key==pygame.K_左或event.key==pygame.K_右:
x_变化=0
游戏显示填充(白色)
玩家(x,y)
x+=x_变化
对于范围内的i(len(things_cor)):
things\u x,things\u y=things\u cor[i]
事物(事物x,事物y,事物添加[i])
对于范围内的i(len(things_cor)):
事物是变化的
如果事物[i][1]>显示高度:
things_cor[i][1]=random.randint(-2000,-1000)
things\u cor[i][0]=random.randint(0,显示宽度)
添加的事物[i]=随机选择(事物)
添加的东西。追加(随机选择(东西)
如果len(添加的内容)<6:
事物(
[random.randint(0,显示宽度,-10])
如果x<0:
x=0
elif x>显示宽度-玩家宽度:
x=显示宽度-播放器宽度
时钟滴答(60)
pygame.display.update()
博弈(循环)
使用对象和来检测两个对象或两个图像的边界矩形之间的碰撞:

rect1=pygame.Rect(x1,y1,w1,h1)
rect2=pygame.Rect(x2,y2,w2,h2)
如果rect1.collide rect(rect2):
# [...]
如果必须创建图像(对象),则可以获取的边界矩形,其中曲面的位置必须由关键字参数设置,因为返回的矩形始终从(0,0)开始:
(见附件)

def game_loop():
# [...]
运行时:
# [...]
player_rect=player_img.get_rect(左上=(x,y))
对于范围内的i(len(things_cor)):
things\u rect=添加的东西[i]。get\u rect(左上角=东西[i])
如果玩家正确碰撞(物体正确):
打印(“点击”)
玩家(x,y)
x+=x_变化
对于范围内的i(len(things_cor)):
things\u x,things\u y=things\u cor[i]
事物(事物x,事物y,事物添加[i])

用于将游戏开始延迟一段时间
pygame.time.get_ticks()
返回调用
pygame.init()
后的毫秒数。例如:

def game_loop():
# [...]
运行时:
通过的时间=pygame.time.get_ticks()#通过的时间(毫秒)
开始时间=100*1000开始时间(毫秒)(100秒)
# [...]
#移动播放器
如果通过\u时间>=开始\u时间:
x+=x_变化
如果x<0:
x=0
elif x>显示宽度-玩家宽度:
x=显示宽度-播放器宽度
#搬家
如果通过\u时间>=开始\u时间:
对于范围内的i(len(things_cor)):
事物是变化的
如果事物[i][1]>显示高度:
things_cor[i][1]=random.randint(-2000,-1000)
things\u cor[i][0]=random.randint(0,显示宽度)
添加的事物[i]=随机选择(事物)
添加的东西。追加(随机选择(东西)
如果len(添加的内容)<6:
事物(
[random.randint(0,显示宽度,-10])
#绘制场景并更新显示
游戏显示填充(白色)
玩家(x,y)
对于范围内的i(len(things_cor)):
things\u x,things\u y=things\u cor[i]
事物(事物x,事物y,事物添加[i])
pygame.display.update()
时钟滴答(60)