Pygame碰撞与变化的精灵

时间:2016-07-05 21:23:50

标签: python-2.7 pygame sprite collision game-physics

好的,

我到处寻找,但仍无法弄清楚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)

1 个答案:

答案 0 :(得分:0)

看起来你想要检查这两个对象是否重叠。幸运的是Pygame有一个内置函数colliderect,它检查两个矩形是否重叠。我在这里把它放到一个类方法中,因为我看到你的对象有名为rect的Pygame矩形变量:

9.0f

以下是文档:pygame.Rect