【问题标题】:Pygame Collision with Changing spritesPygame 与不断变化的精灵发生碰撞
【发布时间】:2023-03-05 01:49:01
【问题描述】:

好的,

我到处寻找,仍然无法弄清楚 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 类的着陆垫,当它击中它们时,只会将 stop 设置为 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)

【问题讨论】:

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


    【解决方案1】:

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

    def overlaps (self, other_rect):
       return self.rect.colliderect(other_rect)
    

    这是文档:pygame.Rect

    【讨论】:

      猜你喜欢
      • 2017-09-14
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 2018-10-26
      相关资源
      最近更新 更多