Вы не захотите вызывать функцию из той же функции (рекурсивная функция) в этой ситуации.Лучшим подходом может быть:
def spawn_enemy():
# code that makes an enemy
print("an enemy has been spawned")
return True # would be "return enemy" after you create your enemy entity
def EnemySpawnThread():
enemy_list = [] # to maintain records of all enemies made
while True: # make enemies forever
sleep(randint(1,5))
enemy_list.append(spawn_enemy()) # call our function we made above which spawns enemies
В настоящее время это будет просто список, подобный [True, True, True, ...]
, но в конечном итоге вы, вероятно, определите класс врага, и он станет [enemy_object, enemy_object, ...]
, что предпочтительнее, потому что лучший способЯ обнаружил, что для удаления объектов нужно сохранить их в списках, а затем del enemy_list[index]
, чтобы удалить их (например, когда враг умирает, так что он не использует память).Кроме того, он дает вам возможность перебирать, например:
for enemy in enemy_list:
enemy.move()
enemy.attack()
enemy.die()
Именно поэтому вы бы хотели, чтобы enemy
был классом с методами, подобными показанным выше.
В качестве примечаниявы, вероятно, захотите иметь enemy_list
в качестве глобальной переменной (или в вашей основной функции), чтобы все ваши потоки могли получить к ней доступ.В противном случае вам нужно будет реализовать встроенный стандарт queue.Queue()
с python.