Как контролировать, как часто враги apperar, используя модуль времени в python - PullRequest
0 голосов
/ 11 января 2020

Я пытаюсь сделать игру, в которой вы должны сбивать круги. Я хочу, чтобы круги появлялись на экране каждые несколько секунд. Я попытался сделать это:

for e in enemies:
        e.draw()
        e.move()
        if e.x <= -20:
            p.hp -= 1
            enemies.remove(e)

        then = time.time()
        now  = time.time()
        if now - then >= 4: # Calculate time difference and if it is less than 4
            for i in range(random.randint(1, 2)): # spawn more enemies
                enemies.append(Enemy())
                e.draw()
                e.move()

Я попытался поместить его в свой основной l oop, но это не помогло. Как я могу правильно рассчитать разницу во времени и создать круги каждые несколько секунд? Спасибо

1 Ответ

1 голос
/ 11 января 2020

Во-первых: я бы отдельно перемещал и проверял столкновения, отдельно проверял then добавлял новых врагов и отдельно рисовал врагов.

Во-вторых: я бы использовал список then, чтобы хранить время для всех удаленных врагов.

В-третьих: в python нецелесообразно удалять элементы из списка, который вы повторяете, потому что он может пропускать некоторые элементы (он не будет проверять элемент, который был после удаленного элемента, поскольку он перемещается вместо удаленного элемента). Популярный метод - добавлять в новые элементы списка, которые вы хотите сохранить, и заменять список после for -l oop

then = [] # create at start of game

# --- only move and check collisions ---

enemies_keep = []

for item in enemies:
    item.move()
    if item.x <= -20:
        p.hp -= 1
        then.append(time.time()) 
    else:
        enemies_keep.append(item)

enemies = enemies_keep

# --- only add new enemies ---

now  = time.time()

then_keep = []

for item in then:
    if now - item >= 4: # Calculate time difference and if it is less than 4
        for i in range(random.randint(1, 2)): # spawn more enemies
           enemies.append(Enemy())
    else:
        then_keep.append(item)

then = then_keep

# --- only draw ---

for item in enemies:
    item.draw()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...