嘿,我正在pygame中制作这个太空射击游戏,想一次生成10个敌人。这是我使用的代码:
blocks.append([random.randrange(0, display_width),0])
for block in blocks:
pygame.draw.rect(game_display, green, (block[0],block[1], 30, 40))
for leng in range(len(blocks)):
blocks[leng][1]+=10
for block in blocks:
if block[1]<0:
blocks.remove(block)
使用此代码,我的屏幕上充满了敌人(绿色矩形)。如果敌人离开屏幕或死亡,我有什么办法可以一次产生一定数量的敌人,并继续产生更多的敌人?
答案 0 :(得分:2)
开始使用Rect
类(而不是代表敌人的列表)(实际上,您应该使用Sprite
类,但一次只能使用一个步骤。)
所以不是
blocks.append([random.randrange(0, display_width),0])
for block in blocks:
pygame.draw.rect(game_display, green, (block[0],block[1], 30, 40))
我们可以写
blocks.append(pygame.Rect(random.randrange(0, display_width), 0, 30, 40))
for block in blocks:
pygame.draw.rect(game_display, green, block)
,而不是
for leng in range(len(blocks)):
blocks[leng][1]+=10
for block in blocks:
if block[1]<0:
blocks.remove(block)
我们可以使用(查看代码变得更加清晰):
for block in blocks[:]:
block.move_ip(0, 10)
if not game_display.get_rect().contains(block):
blocks.remove(block)
blocks.append(pygame.Rect(random.randrange(0, display_width), 0, 30, 40))
每当有人离开屏幕时,它还会添加一个新敌人。我们也可以像这样重置它的位置:
for block in blocks:
block.move_ip(0, 10)
if not game_display.get_rect().contains(block):
block.x = random.randrange(0, display_width)
因此,每当您希望显示新矩形时,只需致电
blocks.append(pygame.Rect(random.randrange(0, display_width), 0, 30, 40))
您可能想将其放入函数中,或者最好使用@Paxz类