gpt4 book ai didi

python - Pygame 碰撞检测对象和矩形

转载 作者:行者123 更新时间:2023-11-28 22:50:58 27 4
gpt4 key购买 nike

是的,我在问关于这个程序的另一个问题:D

无论如何,我目前的程序在屏幕上创建两条线,两条线之间有一个可以滚动的间隙。从这里,我显然需要查看两个对象是否发生碰撞。因为我只有一个 sprite 和一个矩形,所以我认为为它们制作两个类有点毫无意义而且有点矫枉过正。但是,我只能找到与我显然不需要的类(class)相关的教程。所以,我的问题真的是:是否可以测试标准图像和 Pygame rect 之间的碰撞?如果不是,我如何转换图像、矩形或两个 Sprite 来执行此操作。 (最好不要使用类。)

注意:图像和矩形是通过以下方式创建的(如果有所不同)

bird = pygame.image.load("bird.png").convert_alpha()
pipeTop = pygame.draw.rect(screen, (0,200,30), Rect((scrollx,0),(30,height)))
pipeBottom = pygame.draw.rect(screen, (0,200,30), Rect((scrollx,900),(30,-bheight)))

最佳答案

图像本身没有位置。您无法测试矩形与未放置在世界中的物体之间的碰撞。我建议创建一个 Bird 类和一个 Pipe 类,这两个类都是 pygame.Sprite 的子类。

Pygame 已经内置了碰撞检测。

一个简短的例子

bird = Bird()
pipes = pygame.Group()
pipes.add(pipeTop)
pipes.add(pipeBottom)

while True:
if pygame.sprite.spritecollide(bird,pipes):
print "Game Over"

编辑:

不要害怕类(class),你迟早会用到它们。如果你真的不想使用 Sprite ,你可以使用 birds rect 和管道并调用 collide_rect 来检查它们是否重叠。

编辑2:

从 pygame 文档修改的示例 Bird 类

class Bird(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)

self.image = pygame.image.load("bird.png").convert_alpha()

# Fetch the rectangle object that has the dimensions of the image
# Update the position of this object by setting the values of rect.x and rect.y
self.rect = self.image.get_rect()

然后您可以添加诸如 move 之类的方法,这将利用重力将鸟向下移动。

这同样适用于 Pipe,但您可以创建一个空的 Surface,然后用一种颜色填充它,而不是加载图像。

image = pygame.Surface(width,height)
image.fill((0,200,30)

关于python - Pygame 碰撞检测对象和矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22155198/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com