如何在Pygame中给pygame.sprite.rect矩形分配一个 "rect "属性?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Pygame中给pygame.sprite.rect矩形分配一个 "rect "属性?相关的知识,希望对你有一定的参考价值。

这个问题以前有人问过,但他们回答的代码对我不适用。

我想在游戏中检查两个矩形是否相撞,对于圆,我在圆后面放了一个矩形(它的颜色是黑色的)。

然而,当我运行时,我得到一个错误,说这个矩形需要有一个矩形属性。

这是我的代码。

clock = pygame.time.Clock()

pygame.init()
change = False
screen = pygame.display.set_mode((400, 300))

done = False
x = 100
y = 30
bound = False
while not done:
    for event in pygame.event.get():


        if event.type == pygame.QUIT:
             done = True
        elif event.type == pygame.KEYDOWN and event.key == pygame.K_f:
             color = (255, 255, 255)
             pygame.draw.rect(screen, color, (110, 30, 60, 60))
             bound = True
        elif event.type == pygame.KEYDOWN and event.key == pygame.K_z:
             change = not change
    if bound:
        pressed = pygame.key.get_pressed()

        if pressed[pygame.K_DOWN] or pressed[pygame.K_s]:
            y += 5
        elif pressed[pygame.K_RIGHT] or pressed[pygame.K_d]:
            x += 5
        elif pressed[pygame.K_LEFT] or pressed[pygame.K_a]:
            x -= 5
        elif pressed[pygame.K_UP] or pressed[pygame.K_w]:
            y -= 5
        elif change:
            color2 = (0, 128, 86)
        else:
            color2 = (0, 128, 10)
        screen.fill((0, 0, 0))
        pygame.draw.rect(screen, color2, (x, y, 60, 60))
        #pygame.draw.rect(screen, (255, 255, 255), (150, 30, 10, 60))
        pygame.draw.rect(screen, (255, 255, 255), (x+ 65, y + 24, 20, 10))
    else:
        pressed = pygame.key.get_pressed()

        if pressed[pygame.K_DOWN] or pressed[pygame.K_s]:
            y += 5
        elif pressed[pygame.K_RIGHT] or pressed[pygame.K_d]:
            x += 5
        elif pressed[pygame.K_LEFT] or pressed[pygame.K_a]:
            x -= 5
        elif pressed[pygame.K_UP] or pressed[pygame.K_w]:
            y -= 5
        elif change:
            color2 = (0, 128, 86)
        else:
            color2 = (0, 128, 10)

        screen.fill((0, 0, 0))
        player = pygame.draw.rect(screen, color2, (x, y, 60, 60))
        back = pygame.draw.rect(screen, (0, 0, 0), (210, 210, 40, 40))
        gun1 = pygame.draw.circle(screen, (0, 0, 255), (250, 250), 40, 1)
        pygame.draw.rect(screen, (255, 255, 255), (240, 245, 20, 10))
    clock.tick(60)

    pygame.display.flip()

谁能给我一些能给我的矩形分配rect属性的代码?

谢谢!这个问题以前也有人问过,但我不知道该怎么回答。

答案

操作 pygame.sprite.collide_rect(), pygame.sprite.spritecollide(), pygame.sprite.groupcollide() 等都是用于与 pygame.sprite.Sprite 对象和 pygame.sprite.Group 对象。这种操作使用内部的 .rect 的属性 Sprite 物体,以检测碰撞。

你没有 Sprite 也不是 Group但你有 pygame.Rect 对象。

要验证是否2 pygame.Rect 物体发生碰撞时,你必须使用 pygame.Rect.colliderect(). 例如:

player = pygame.draw.rect(screen, color2, (x, y, 60, 60))
back = pygame.draw.rect(screen, (0, 0, 0), (210, 210, 40, 40))
gun1 = pygame.draw.circle(screen, (0, 0, 255), (250, 250), 40, 1)

if player.colliderect(back):
    print("player collide back")
if player.colliderect(gun1):
    print("player collide gun1")

以上是关于如何在Pygame中给pygame.sprite.rect矩形分配一个 "rect "属性?的主要内容,如果未能解决你的问题,请参考以下文章

浅谈pygame.sprite的精灵碰撞

Pygame sprite创建重复而不是移动

pygame之精灵碰撞检测

Pygame - 使用Sprites渲染多行文本

谁来告诉我python pygame的rect问题

pygame 的精灵使用