0

我正在使用一个关于我正在开发的空间卷轴射击的精灵生成示例。通过慢慢尝试了解它是如何工作的,我设法让多个精灵横穿屏幕。但是,会生成许多精灵。

所以我遇到的问题是限制精灵的初始数量,而不是代码产生的数量。我想过使用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 > 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()
4

1 回答 1

0

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

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

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

于 2013-04-10T07:54:31.593 回答