Python pygame“;参数必须是rect样式的对象;碰撞误差

Python pygame“;参数必须是rect样式的对象;碰撞误差,python,python-3.x,pygame,Python,Python 3.x,Pygame,我正在做一个平台游戏,我因为碰撞被阻止了。。。你能帮助我吗?我实际上添加了一些块来测试碰撞,在Perso类下创建了一个播放器。我真的需要做的工作,使碰撞后,门户,还必须精心设计的重力,使球员跳。 这是我的密码: 导入pygame 从pygame.locals导入* pygame.init() #给你一杯 fenetre=pygame.display.set_模式((1024768)) pygame.display.set_标题(“门户转义”) #给人浇上奶油 班级人员(pygame.sprite

我正在做一个平台游戏,我因为碰撞被阻止了。。。你能帮助我吗?我实际上添加了一些块来测试碰撞,在Perso类下创建了一个播放器。我真的需要做的工作,使碰撞后,门户,还必须精心设计的重力,使球员跳。 这是我的密码: 导入pygame 从pygame.locals导入* pygame.init()

#给你一杯
fenetre=pygame.display.set_模式((1024768))
pygame.display.set_标题(“门户转义”)
#给人浇上奶油
班级人员(pygame.sprite.sprite):
定义初始化(自):
#self.image=pygame.Surface((100100))
self.image=pygame.image.load(“perso.png”).convert_alpha()
self.position=pygame.Rect((3660)、(100100))
self.rect=self.image.get_rect()
perso=perso()
#将小溪倒入障碍物中
def bloc():
bloc=pygame.Surface((200200))
bloc_rect=bloc.get_rect()
整块填充((0,0,255))
费内特·布利特(集团(500600))
红色=pygame.曲面((200500))
red\u rect=red.get\u rect()
红色。填充((255,0,0))
fenetre.blit(红色,(250300))
门户=pygame.Surface((20120))#联合国集团门户
portal_rect=portal.get_rect()
入口填充((0,255,0))
fenetre.blit(入口,(250650))
blocx=[集团,红色,门户]
#菜单
continuer=1
而continuer:
accueil=pygame.image.load(“menu.jpg”).convert()
fenetre.blit(精确,(0,0))
pygame.display.flip()
continuer_-jeu=1
continuer_accueil=1
choix=1
#阿奎尔酒店
当继续进行时:
pygame.time.Clock().tick(30)#限制帧
对于pygame.event.get()中的事件:
如果event.type==QUIT:#quitter le jeu
continuer_accueil=0
continuer_-jeu=0
continuer=0
elif event.type==KEYDOWN:#选择菜单
如果event.key==K_F1:
choix=1
continuer_accueil=0
#合唱团
如果choix!=0:
fond=pygame.image.load(“fond.jpg”).convert()
fenetre.blit(fond,(0,0))
fenetre.blit(个人图像、个人位置)
pygame.display.flip()
pygame.key.set_repeat(400,30)#加速移动和触摸的执行
集团()
而continuer:
对于pygame.event.get()中的事件:#出席会议
如果event.type==退出:
continuer=0
如果event.type==KEYDOWN:
如果event.key==K_DOWN且人员位置y<660:
fenetre.blit(个人图像、个人位置)
如果perso.position.colliderect(blocx):
打印(“碰撞”)
其他:
人员位置y+=3
如果event.key==K_UP:
人员位置y-=3
如果event.key==K_RIGHT且perso.position.x<920:
人员位置x+=3
如果event.key==K_LEFT且perso.position.x>3:
人员位置x-=3
#关于青年、青年和个人的上诉
fenetre.blit(fond,(0,0))
fenetre.blit(个人图像、个人位置)
集团()
pygame.display.flip()
pygame.quit()

此行:

if perso.position.colliderect(blocx):
应采用曲面的
Rect

if perso.position.colliderect(bloc.get_rect()):

缩进已经关闭,代码太多了。请阅读如何创建一个感谢代码工作,但不显示“碰撞”控制台时,触摸“块”。这正常吗?啊,是的,可能在发生碰撞时需要调用
bloc.get_rect()
。我已相应地更新了我的答案。看看这能不能解决问题。
if perso.position.colliderect(bloc.get_rect()):