当前位置: 首页 > 知识库问答 >
问题:

pyplay”参数必须是rect样式对象”碰撞错误

阎鸿煊
2023-03-14

我目前正在制作一个平台游戏,我被阻止碰撞...你能帮帮我吗?我实际上添加了一些方块来测试碰撞,在Perso类下创建了一个玩家。我真的需要在那个入口之后制造碰撞,并且必须精心设计重力来让玩家跳跃。这是我的代码:导入pyplay从pygame.locals导入*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个答案

柯河
2023-03-14

这一行:

if perso.position.colliderect(blocx):

应该取曲面的Rect

if perso.position.colliderect(bloc.get_rect()):
 类似资料:
  • 这是我的代码的一部分,工作不正常,我试图设置键,使桨向上和向下移动,但我无法找出我的代码有什么问题。 错误是: 参数必须是rect样式对象

  • 当我试图运行我的程序我结束了以下错误 错误发生在代码的第134行。这里是使用的代码,详细的答案将不胜感激,因为我是pygame的新手

  • 免责声明:我知道这个网站上的其他人也有这个错误,但它是在不同的环境中出现的,而且修复似乎在这里不起作用。 嘿stackoverflow,基本上我一直在做一个横向空间入侵者游戏,你的船跟随你鼠标的Y位置,但留在左边,点击发射一颗子弹。敌人从右边随机产卵,然后飞向左边,一旦物体进入屏幕一侧,它们就会被移除。这一切都很好,但是当我试图实施冲突检测来查看射击何时击中敌人时,我得到了错误: 它指向行返回hi

  • 我创建这个类是为了更好地使用它 然后我想创建一个简单的函数来剪辑一个矩形,就像这样 但是当我将rect传递到我的函数中时,我在标题中得到了错误。我甚至还打印了字体 我想知道Rect样式的对象和Rect对象之间是否有区别,因为我太困惑了。此外,在屏幕上绘制矩形是布局tic-tac-toe GUI的最佳方式,还是绘制线条更简单。

  • 一段时间以来,我一直在努力教自己如何在pygame中使用精灵,而现在我被困在碰撞检测上。 我在代码中遇到问题的具体位置是标记为“error here”的注释部分,这段代码一直给我“TypeError:Argument必须是rect-style-object”错误,该特定代码的目标是检测冲突。 这段代码的目标是每当玩家块进入非玩家块时在shell中打印一条消息,正如我之前所说的,我很难做到这一点。

  • 我正在用一个简单的游戏尝试python,但是遇到了这个错误 代码如下所示: 然后错误显示: 文件“my_code/alien_invision/bullet.py”,第15行,在init self中。rect=pygame。Rect(左=0,上=0,宽=self.settings.bullet\u width, 类型错误:参数必须是Rect样式的对象 如果我按以下方式更改该行,它将正常工作: 我不