Pygame - 限制精灵的实例

时间:2013-04-09 19:35:56

标签: pygame sprite

我正在使用一个关于精灵生成的例子,用于我正在开发的空间卷轴射击。通过慢慢地试图理解它是如何工作的,我已经设法让多个精灵在屏幕上横向移动。但是,生成了许多精灵。

所以我遇到的麻烦是限制精灵的初始数量而不是代码产生的众多数量。我想过使用if sprites.__len__ < 10: sprites.add(drone),但是当我尝试使用时,它没有用。

我的想法是,每次循环时,它会检查组中精灵的数量,如果它小于10,则向组中添加一个精灵,直到它达到10.这样,如果它离开屏幕或是被破坏后,它会继续进行检查并保持不变。

这是玩家类:

class Player(pygame.sprite.Sprite):
    def __init__(self, *groups):
        super(Player, self).__init__(*groups)
        self.image = pygame.image.load('player.png')
        self.rect = pygame.rect.Rect((screen_width, (random.randrange(0,screen_height))), self.image.get_size())
        self.dx = -10
        self.pos = random.randrange(0,screen_height)

    def update(self):
       self.rect.centerx += self.dx

       if self.rect.right < 0:
           self.kill()

这是关于添加精灵的部分。

        sprites.update()
        screen.fill((200, 200, 200))
        sprites.draw(screen)


        drone = Player()
        self.y = random.randrange(0,screen_height)
        sprites.add(drone)

        pygame.display.flip()

这可能很明显,但我仍在学习,所以指导会很棒。

第二个问题 - 更多的是对思想的确认。如果我不希望精灵在屏幕底部画一半。我基本上是说如果self.rect.bottom&gt; screen_height,然后定位精灵@ screen_height

完整来源:http://pastebin.com/PLRVHtxz

编辑 - 我想我已经解决了它,只需要让精灵运行得更顺畅。

while 1:
            clock.tick(40)
            numberAlien = 5

            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    return
                if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
                    return


                sprites.update()
                screen.fill((200, 200, 200))
                sprites.draw(screen)


                drone = Player()
                if sprites.__len__() < numberAlien:
                    self.y = random.randrange(0,screen_height)
                    sprites.add(drone)

                pygame.display.flip()

1 个答案:

答案 0 :(得分:0)

您可以继承SpriteGroup,添加精灵总数的新字段,并检查add方法以查看是否可以添加。 您不应该使用__。

测试任何变量

至于运动,我相信,由于clock.tick(40),你看不到平稳运动。 等待40毫秒,直到它恢复运行。您可以将tick减少到10,并调整为精灵更改的dx,或尝试更通用的方法。

对clock.tick()的调用返回自上次调用以来的ms量。这将是你的时间增量。然后,您可以拥有全局SPEED。要移动的像素数量将从SPEED * delta计算。