首页 >后端开发 >Python教程 >为什么我的 Pygame 碰撞检测总是返回 True,以及为什么我的图像矩形位置错误地设置为 (0, 0)?

为什么我的 Pygame 碰撞检测总是返回 True,以及为什么我的图像矩形位置错误地设置为 (0, 0)?

Linda Hamilton
Linda Hamilton原创
2024-12-18 12:57:11681浏览

Why Does My Pygame Collision Detection Always Return True, and Why Is My Image Rectangle Position Incorrectly Set to (0, 0)?

为什么碰撞测试总是返回 'True' 而图像矩形的位置总是错误 (0, 0)

碰撞测试问题

原因:

碰撞测试依靠 Sprite 对象的 rect 属性来确定它们是否相交。但是,代码中的 get_rect() 方法未正确将矩形的位置设置为预期坐标。

解决方案:

使用 get_rect() 时,您可以使用关键字参数指定位置或将其分配给矩形的左上角虚拟属性。使用此更正后的代码:

self.rect = self.image.get_rect(topleft=(self.x, self.y))

不正确的矩形位置

原因:

您向精灵添加了不必要的 x 和 y 属性,而不是依赖在矩形的位置上。结果,矩形的位置始终设置为 (0, 0),因为 Surface 对象没有默认位置。

解决方案:

删除 x 和 y 属性并使用 rect 属性设置 Sprite 对象的位置。这是更正后的代码:

class Ball(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load("ball.png")
        self.rect = self.image.get_rect(topleft=(280, 475))
        self.col = False

使用 Sprite Group 简化代码

您可以通过使用 pygame.sprite.Group 来管理 Sprite 对象来进一步简化代码。这将自动处理绘制和更新。

obstacle = Obstacle()
ball = Ball()

# Create a sprite group and add the sprites to it.
all_sprites = pygame.sprite.Group([obstacle, ball])

while not crashed:
    # [... event handling and game logic]

    gameDisplay.fill((255, 255, 255))

    # Draw all sprites using the group's draw method.
    all_sprites.draw(gameDisplay)

    # [... other game loop tasks]

以上是为什么我的 Pygame 碰撞检测总是返回 True,以及为什么我的图像矩形位置错误地设置为 (0, 0)?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn