好的,
我到处寻找,但仍无法弄清楚PyGame的碰撞。我有两个精灵:着陆器和月球表面。月亮是一个透明背景的不平坦表面,而着陆器是一个精灵,通过L,D,UP按键改变图像。
我在碰撞检测方面做错了某事错误。否则,我的程序中的所有内容都会游泳
这是我的着陆器类:
class ShipClass(pygame.sprite.Sprite):
def __init__(self, image_file, position):
pygame.sprite.Sprite.__init__(self)
self.imageMaster = pygame.image.load(image_file)
self.image = self.imageMaster
self.rect = self.image.get_rect()
self.mask = pygame.mask.from_surface(self.imageMaster)
self.rect.topleft = position
## This doesn't work
# def checkCollision(self, Mask):
# if Mask.overlap_area
def update(self):
self.rect = self.image.get_rect()
这是我的月球表面类:
class MoonSurface(pygame.sprite.Sprite):
def __init__(self, image_file, position):
pygame.sprite.Sprite.__init__(self)
self.imageMaster = pygame.image.load(image_file).convert_alpha()
self.image = self.imageMaster
self.rect = self.image.get_rect()
self.rect.topleft = position
我需要添加什么,以便在我的游戏中,如果着陆器击中月球,它将变量停止设置为1并且崩溃为1?我还计划在MoonSurface类中添加登陆垫,当它击中它们时,只设置停止为1。
我的精灵移动如下:
speed = [0,0]
position = [width-524,height-718]
gravity = 0.05
StartingFuel = 100
done = False
while not done:
event = pygame.event.poll()
if event.type == QUIT:
pygame.quit()
sys.exit(0)
elif event.type == pygame.KEYDOWN:
if event.key == K_ESCAPE:
pygame.quit()
sys.exit(0)
else:
lander = ShipClass('lander.png', position)
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
lander = ShipClass('landerLeft.png', position)
# lander.set_colorkey(BLACK)
speed[0] += 0.3
fuel -= 1
if keys[pygame.K_RIGHT]:
lander = ShipClass('landerRight.png', position)
# lander.set_colorkey(BLACK)
speed[0] -= 0.3
fuel -= 1
if keys[pygame.K_UP]:
lander = ShipClass('landerUp.png', position)
# lander.set_colorkey(BLACK)
speed[1] -= 0.4
fuel -= 1
speed[1] += gravity
position[0] += speed[0]
position[1] += speed[1]
if position[0] < 0:
position[0] = width
elif position[0] > width:
position[0] = 0
screen.blit(lander.image, position)
答案 0 :(得分:0)
看起来你想要检查这两个对象是否重叠。幸运的是Pygame有一个内置函数colliderect,它检查两个矩形是否重叠。我在这里把它放到一个类方法中,因为我看到你的对象有名为rect的Pygame矩形变量:
9.0f
以下是文档:pygame.Rect