【发布时间】:2013-04-09 19:35:56
【问题描述】:
我正在使用一个关于精灵生成的示例,用于我正在开发的空间卷轴射击。通过慢慢尝试了解它是如何工作的,我设法让多个精灵横穿屏幕。但是,会生成许多精灵。
所以我遇到的问题是限制精灵的初始数量,而不是代码产生的数量。我曾想过使用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()
【问题讨论】:
-
那你有什么问题?
-
对不起,基本上是,如何让一定数量的精灵顺利通过屏幕。
-
这可能会有所帮助,但不是完整的解决方案:
if not_in_bounds(sprite): sprite.die()自动删除您不再需要的任何内容。 -
注意:如果您为每个项目符号创建
Player的实例,它每次都会加载一个 new 的 png 图像副本。你可以创建一个纹理字典,这样你就不会重复了。