Как оживить атаку для этой игры, созданной в Pygame? - PullRequest
0 голосов
/ 11 апреля 2020

Итак, я сделал этот код:

def spear_atk(x,y):
    global spear_state
    spear_state="attack"
    screen.blit(spear,(x-20,y))

running=True

while running:
    screen.fill((0, 0, 50))
    screen.blit(bg, (0, 0))
    for event in pygame.event.get():
        if event.type == QUIT:
            running = False

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                playerx_change = -2
            if event.key == pygame.K_RIGHT:
                playerx_change = 2
            if event.key == pygame.K_UP:
                playery_change = -2
            if event.key == pygame.K_DOWN:
                playery_change = 2
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT or event.key == pygame.K_UP or event.key == pygame.K_DOWN:
                playerx_change = 0
                playery_change = 0
            if event.key == pygame.K_SPACE:
                spear_state = "attack"
                spear_atk(playerx,playery)
    playerx += playerx_change
    playery += playery_change
    player(playerx,playery)
    inamic(enemyx,enemyy)
    pygame.display.update()

И я хочу, чтобы атака копьем длилась чуть дольше. Например, количество времени n. Как увеличить время, в течение которого копье отображается на экране?

1 Ответ

0 голосов
/ 11 апреля 2020
screen.fill((0, 0, 50))
screen.blit(bg, (0, 0))

Итак, каждый раз через l oop ваш план состоит в том, чтобы перерисовать всю сцену.

Поэтому каждый раз через l oop, , если вы все еще показывая анимацию , вам нужно нарисовать копье. Вы используете spear_state, который вы установили в начале атаки, чтобы отследить, верно ли это.

Итак, теперь есть две проблемы:

  • Вам нужно контролирует время, необходимое для go через l oop.

  • Вы должны решить, сколько раз через l oop анимация будет быть активным и отслеживать, как долго анимация уже была активна. Вы можете сделать это почти так же, как с существующим spear_state - попробуйте использовать целочисленное значение, представляющее, сколько еще итераций («фреймов», в игре Game-Dev) анимация будет активна; когда оно достигает нуля, вы пропускаете рисование копья и меняете состояние обратно.

Вы можете сделать более изумительные анимации, установив несколько изображений копья в соответствующих положениях и используя этот счетчик кадров решить, что рисовать (например, путем индексации в списке). Это легче понять, если вы знакомы с базовой теорией анимации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...