Эффективная обработка ввода с клавиатуры

Зарегистрируйтесь на любом бесплатном пинге / проверке / мониторинге, и он будет отправлять запросы на ваш сайт каждые 5/10/15 минут.

9
задан Claudiu 23 November 2008 в 07:26
поделиться

3 ответа

Вы могли создать словарь, где ключи являются входом, и значение является функцией, которая обрабатывает нажатие клавиши:

def handle_quit():
  quit()

def handle_left():
    curpiece.shift(-1, 0)
    shadowpiece = curpiece.clone(); setupshadow(shadowpiece)

def handle_right():
    curpiece.shift(1, 0)
    shadowpiece = curpiece.clone(); setupshadow(shadowpiece)

def handle_pause():
    if not paused:
        paused = True

branch = {
  K_q: handle_quit
  K_e: handle_pause
  K_LEFT: handle_left
  K_RIGHT: handle_right
}

for event in pygame.event.get():
    if event.type == KEYDOWN:
        branch[event.key]()

Затем изменение ключей является вопросом изменения ключей словаря.

17
ответ дан 4 December 2019 в 09:39
поделиться

Что я делаю в наше время, имеют своего рода входной сборочный класс/функцию/поток, который проверит список предопределенного ключа-> привязка события.

Что-то вроде этого:

class InputHandler:
    def __init__ (self, eventDispatcher):
        self.keys = {}
        self.eventDispatcher = eventDispatcher
    def add_key_binding (self, key, event):
        self.keys.update((key, event,))
    def gather_input (self):
        for event in pygame.event.get():
            if event.type == KEYDOWN:
                event = self.keys.get(event.key, None)
                if not event is None:
                    self.eventDispatcher.dispatch(event)

....
inputHandler = InputHandler(EventDispatcher)
inputHandler.add_key_binding(K_q, "quit_event")
...
inputHandler.gather_input()
....

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

Кроме того, ключи могут быть легко связаны с различными событиями, которые могли быть считаны из файла конфигурации или чего-то и любого ключа, который не связывается с событием, просто проигнорирован.

2
ответ дан 4 December 2019 в 09:39
поделиться

в дополнение к ответу superjoe30 можно использовать два уровня отображения (два словаря)

  • ключ => командная строка
  • командная строка => функция

Я думаю, что это помогло бы позволить пользовательские отображения. т.е. таким образом, пользователи могут отобразить свои ключи к "командам", а не "названию функции"

3
ответ дан 4 December 2019 в 09:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: