Как установить интервал между двумя событиями клавиатуры? - PullRequest
0 голосов
/ 25 декабря 2018

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

Я пытался использовать часы и time.time(), но они не работали.

Это моя играцикл:

while self.running:
    self.counter += 1
    self.clock.tick(self.fps)

    if self.counter == self.fps:
        self.counter = 0
        self.canUpdate = True

Это код движения:

if self.game.canUpdate:
    if pressed_keys[K_DOWN]:
        self.moveDown()
        self.game.canUpdate = False

def moveDown(self):
    if self.canMoveTo(self.gridx, self.gridy+1):
        for sprite in self.game.sprites:
            if sprite != self:
                sprite.y -= self.game.gridSize
                self.gridy += 1
                print(self.gridy, self.game.canUpdate)

После одного нажатия стрелки вниз gridy с шагом более 500 и self.game.canUpdate остается истинным

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

Вы должны использовать цикл событий или pygame.event.wait, если вы хотите перемещаться один раз за нажатие клавиши.При нажатии клавиши вниз в очередь событий будет добавлено одно событие pygame.KEYDOWN с атрибутом key pygame.K_DOWN.Просто проверьте, была ли нажата эта клавиша в цикле событий, а затем переместите спрайты.

import pygame as pg


pg.init()
screen = pg.display.set_mode((640, 480))
clock = pg.time.Clock()
BG_COLOR = pg.Color('gray12')

pos = pg.Vector2(120, 80)

done = False
while not done:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            done = True
        elif event.type == pg.KEYDOWN:
            if event.key == pg.K_DOWN:
                # This will be executed once per event.
                pos.y += 20
            elif event.key == pg.K_UP:
                pos.y -= 20

    screen.fill(BG_COLOR)
    pg.draw.rect(screen, (0, 128, 255), (pos, (20, 20)))
    pg.display.flip()
    clock.tick(60)

pg.quit()
0 голосов
/ 25 декабря 2018

Вы можете использовать time.sleep()

import time    
time.sleep(500)

для вызова этого блока с вашим событием клавиши, поэтому при следующем нажатии клавиши выполнение вашего кода останавливается на 500 с, а затем оно ожидает следующего события нажатия клавиши.Более того, Counter() нужно рассчитывать на 500, которым требуется больше ресурсов процессора, чем sleep(), если вы планируете что-то большее.

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