Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我有一个敌人的名单,但我不知道如何保持他们在屏幕上。(太空入侵者)_Python_Pygame - Fatal编程技术网

Python 我有一个敌人的名单,但我不知道如何保持他们在屏幕上。(太空入侵者)

Python 我有一个敌人的名单,但我不知道如何保持他们在屏幕上。(太空入侵者),python,pygame,Python,Pygame,敌方.x不起作用,因为选定的敌人被杀死后,将从列表中消失。我尝试了其他方法,设法让他们停止,但他们不会回来。这是我的第一场比赛,所以我不熟悉这些可能的错误。请帮忙:) def level1(): shipX=462 shipY=668 bg=pygame.image.load('spacebackground.png') ship1=pygame.image.load('ship1.png') lives=pygame.image.load('ship1.png') 激光=[] 敌人x=50 敌

敌方.x不起作用,因为选定的敌人被杀死后,将从列表中消失。我尝试了其他方法,设法让他们停止,但他们不会回来。这是我的第一场比赛,所以我不熟悉这些可能的错误。请帮忙:)

def level1():
shipX=462
shipY=668
bg=pygame.image.load('spacebackground.png')
ship1=pygame.image.load('ship1.png')
lives=pygame.image.load('ship1.png')
激光=[]
敌人x=50
敌人_x2=50
敌人x3=50
enemy1=pygame.image.load('enemy1.png')
enemy1=pygame.transform.scale(enemy1,(50,50))
敌人=[]
对于范围(10)内的i:
敌人.append(pygame.Rect(敌人x,100,50,50))
敌人x+=65
对于范围(10)内的i:
敌人.append(pygame.Rect(敌人_x2,150,50,50))
敌人_x2+=65
对于范围(10)内的i:
敌人.append(pygame.Rect(敌人x320050))
敌人_x3+=65
#事件处理
尽管如此:
时钟滴答(60)
laserX=shipX+23
laserY=658
对于pygame.event.get()中的事件:
如果event.type==退出:
pygame.quit()
sys.exit()
如果(pygame.key.get_pressed()[pygame.K_SPACE])!=0:
激光。附加(pygame.Rect(激光,激光,5,20))
#背景
bg=pygame.transform.scale(bg,(1024768))
shipRect=pygame.Rect(shipX,shipY,50,50)
ship1=pygame.transform.scale(ship1,(50,50))
生命=pygame.transform.scale(生命,(25,25))
如果(pygame.key.get_按下()[pygame.K_RIGHT])!=0:
shipX+=20
如果(pygame.key.get_按下()[pygame.K_左])!=0:
shipX+=-20
对于敌人中的敌人:
对于激光器中的激光器:
如果激光直接碰撞(敌人):
敌人。移开(敌人)
激光。移除(激光)
打破
对于激光器中的激光器:
激光移动ip(0,-10)
对于激光器中的激光器:

如果laser.y您的敌人正在消失,因为您将他们从列表中删除
敌人

for enemy in enemies:
  for laser in lasers:
    if laser.colliderect(enemy):
      enemies.remove(enemy)    # <---- here
      lasers.remove(laser)
      break
然后,在渲染敌人时,只需在绘制敌人之前进行检查以确保其活着。然后,当您希望敌人重新出现时,只需将该值设置回
true
,即可再次绘制。请注意,敌人仍将在原来的位置,因此您可能希望将其移出屏幕,或者确保未检测到死亡敌人的激光碰撞

GLHF

问题到底是什么?你只是想把死去的敌人留在名单上吗?你希望敌人永远不会消失(留下残骸或其他东西),还是只在以后消失(在爆炸动画之后)?“尝试过其他方式”是什么意思——还有什么其他方式?“设法让他们停止”是什么意思——停止什么?你想做什么,发生了什么,为什么错了?
for enemy in enemies:
  for laser in lasers:
    if laser.colliderect(enemy):
      enemies.remove(enemy)    # <---- here
      lasers.remove(laser)
      break
# Set up `enemies` list
alive = [True for e in enemies]
for enemy in enemies:
  for laser in lasers:
    if laser.colliderect(enemy):
      alive[enemies.index(enemy)] = False
      lasers.remove(laser)
      break