Таймер противника все еще продолжается, пока игра приостановлена - PullRequest
0 голосов
/ 03 мая 2020

Итак, я делаю платформерную игру в Pygame и сталкиваюсь с проблемой врагов. Видите ли, мои враги должны двигаться на платформе, и у меня настроен таймер, поэтому, как только таймер включится, враг оборачивается. Тем не менее, у меня также есть функция паузы в моей игре, и игра приостановлена, пока враги не двигаются, таймер поворота врагов все еще работает. Затем происходит то, что противник оборачивается, когда этого не должно быть, и тогда кажется, что противник в воздухе. Я хочу, чтобы таймер сделал паузу, пока игра приостановлена. Вот мой код: Код врага:

class enemy(pg.sprite.Sprite):
def __init__(self,x,y,end,speed):
    pg.sprite.Sprite.__init__(self)
    self.image = pg.image.load("enemy.png")
    self.rect = self.image.get_rect()
    self.rect.x = x
    self.rect.y = y
    self.alive = True
    self.health = 3
    self.end = end
    self.speed = speed
    self.timer = pg.time.get_ticks()

def update(self):
        self.rect.x += self.speed
        now = pg.time.get_ticks()
        if now - self.timer >= self.end:
           self.timer = now
           self.speed *= -1
        if self.health == 0:
            self.kill()

Вот код паузы:

def pause_screen(self):
    self.paused = True

    while self.paused:
        for event in pg.event.get():
            if event.type == pg.QUIT:
                pg.quit()

            if event.type == pg.KEYDOWN:
                if event.key == pg.K_p:
                    self.paused = False

                elif event.key == pg.K_q:
                    pg.quit()

        self.screen.fill(WHITE)
        self.draw_text(str('PAUSED'),70,BLACK,400,200)
        self.draw_text(str('Press p to unpause'),50,BLACK,400,300)
        self.draw_text(str('Press q to quit game'),50,BLACK,400,400)
        pg.display.flip()
        self.clock.tick(5)

Вот как я вызываю своих врагов:

    for ene in self.enemy_list:
        e = enemy(*ene)
        self.all_enemy.add(e)
        self.all_sprites.add(e)

Вот мой если вам это нужно, запустите класс

        self.playing = True
    while self.playing:
        self.clock.tick(FPS)
        self.events()
        self.update()
        self.draw()
        self.load_level()

Также класс врага не входит в основную игру l oop, как класс паузы.

1 Ответ

0 голосов
/ 03 мая 2020

Что вы можете сделать, это получить время, в течение которого меню паузы открыто, и снять его с таймера.

Вам понадобятся 2 переменные

pauseTime = 0
pauseStart = 0

, которые затем можно снять pauseTime из таймера, поэтому

if now - self.timer - pauseTime >= self.end:

Теперь, чтобы узнать, как долго меню паузы открыто для

def pause_screen(self):
    self.paused = True
    pauseStart = pg.time.get_ticks()

    while self.paused:
        ...
    pauseTime += pg.time.get_ticks() - pauseStart # add the time so it doesnt reset after the second pause menu
    pauseStart = 0

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

if pauseStart == 0:
    if now - self.timer - pauseTime >= self.end:

    now = pg.time.get_ticks()
    if now - self.timer - self.pauseTime >= self.end:
         self.timer = now
         self.speed *= -1
         self.pauseTime = 0
    def pause_screen(self):
        self.paused = True
        self.pauseStart = pygame.time.get_ticks()
        while self.paused:
            for event in pg.event.get():
                if event.type == pg.QUIT:
                    pg.quit()

                if event.type == pg.KEYDOWN:
                    if event.key == pg.K_p:
                        self.paused = False

                    elif event.key == pg.K_q:
                        pg.quit()

            self.screen.fill(WHITE)
            self.draw_text(str('PAUSED'),70,BLACK,400,200)
            self.draw_text(str('Press p to unpause'),50,BLACK,400,300)
            self.draw_text(str('Press q to quit game'),50,BLACK,400,400)
            pg.display.flip()
            self.clock.tick(5)
        now = pygame.time.get_ticks()  
        for enemy in self.all_enemy:
            enemy.pauseTime += now - self.pauseStart
        self.pauseStart = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...