I am making a game and when the sprite goes under 100 on the x axis it is supposed to be deleted. The sprites are all located in a class. When the first sprite reaches the end, it deletes the final sprite of the group instead of the first.
self.image = pygame.image.load('Enemy.gif').convert()
self.rect = self.image.get_rect(x=x, y=y)
self.rect.x -= 4
for enemy in EnemyList:
def draw(self, DISPLAY):
time = 0
while not Gameover: #Loop of the gameplay
if time in (0,50,100,150,200):
enemy = Enemy(DIS_HEIGHT,random.randrange(0,DIS_HEIGHT)
You cannot remove items from a list while iterating over it:
def die(self): for enemy in EnemyList: if enemy.rect.x<100: EnemyList.remove(enemy)
You could instead write something like this:
def die(self): global EnemyList EnemyList = [enemy for enemy in EnemyList if enemy.rect.x>=100]
global statement is needed so that the function can modify the
EnemyList, which is outside its scope in this case.
Or store the enemies that you want to delete to another list, and then delete them afterwards.