我正在使用一个关于我正在开发的空间卷轴射击的精灵生成示例。通过慢慢尝试了解它是如何工作的,我设法让多个精灵横穿屏幕。但是,会生成许多精灵。
所以我遇到的问题是限制精灵的初始数量,而不是代码产生的数量。我想过使用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()