pygame"参数必须是rect style object"碰撞错误

时间:2018-04-16 13:05:50

标签: python python-3.x pygame

我正在制作一款平台游戏,我因碰撞而受阻......你能帮助我吗?我实际上添加了一些集团来测试碰撞,在Perso类下创建了一个玩家。我真的需要让碰撞工作在门户之后进行,并且必须精心设计引力以使玩家跳跃。 这是我的代码:     导入pygame     来自pygame.locals import *     pygame.init()

#pour créer une fenêtre
fenetre = pygame.display.set_mode((1024,768))
pygame.display.set_caption("Portal Escape")

#pour créer un perso
class Perso(pygame.sprite.Sprite):
def __init__(self):
    #self.image = pygame.Surface((100,100))
    self.image = pygame.image.load("perso.png").convert_alpha()
    self.position = pygame.Rect((3,660),(100,100))
    self.rect = self.image.get_rect()

perso = Perso()

#pour creer un obstacle et éléments du jeu
def bloc():
bloc=pygame.Surface((200,200))
bloc_rect = bloc.get_rect()
bloc.fill((0, 0, 255))
fenetre.blit(bloc, (500,600))

red=pygame.Surface((200,500))
red_rect = red.get_rect()
red.fill((255, 0, 0))
fenetre.blit(red, (250,300))

portal=pygame.Surface((20,120)) #création d'un bloc portail
portal_rect = portal.get_rect()
portal.fill((0, 255, 0))
fenetre.blit(portal, (250,650))
blocx = [bloc,red,portal]

#Boucle du menu
continuer = 1
while continuer:
    accueil = pygame.image.load("menu.jpg").convert()
    fenetre.blit(accueil, (0,0))
    pygame.display.flip()
    continuer_jeu = 1
    continuer_accueil = 1
    choix = 1
#Boucle de l'accueil
while continuer_accueil:
    pygame.time.Clock().tick(30) #limite les frames de la boucle
    for event in pygame.event.get():
        if event.type == QUIT: #quitter le jeu
            continuer_accueil = 0
            continuer_jeu = 0
            continuer = 0
        elif event.type == KEYDOWN: #choix du menu
            if event.key == K_F1:
                choix = 1
                continuer_accueil = 0
#Boucle du choix
if choix != 0:
    fond = pygame.image.load("fond.jpg").convert()
    fenetre.blit(fond, (0,0))
    fenetre.blit(perso.image, perso.position)
    pygame.display.flip()
    pygame.key.set_repeat(400, 30) #accelérer le deplacement quand la touche est enfoncée
    bloc()
    while continuer:
        for event in pygame.event.get():    #Attente des événements
            if event.type == QUIT:
                continuer = 0
            if event.type == KEYDOWN:
                if event.key == K_DOWN and perso.position.y < 660:
                    fenetre.blit(perso.image, perso.position)
                    if perso.position.colliderect(blocx):
                        print("collide")
                    else:
                        perso.position.y += 3
                if event.key == K_UP: 
                    perso.position.y -= 3
                if event.key == K_RIGHT and perso.position.x < 920:
                    perso.position.x += 3
                if event.key == K_LEFT and perso.position.x > 3:
                    perso.position.x -= 3
        #on appelle les fonctions du jeu, le fond et les perso

        fenetre.blit(fond, (0,0))
        fenetre.blit(perso.image, perso.position)
        bloc()
        pygame.display.flip()

pygame.quit()

1 个答案:

答案 0 :(得分:0)

这一行:

if perso.position.colliderect(blocx):

应该采取表面的Rect

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