libtcod / Python: загрузка процессора через крышу с использованием sys_check_for_event вместо sys_wait_for_event - PullRequest
0 голосов
/ 19 сентября 2018

Я создаю игру на Python 3, используя CFFI-порт libtcod .

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

Я могу переключиться на sys_check_for_event, но каким-то образом это увеличивает загрузку процессора до 100% и, по-видимому, не захватывает движения мыши.Это почти как если бы он проверял события слишком часто.Пытаясь замедлить его, вызывая time.sleep, каждый цикл также не работает.

Я использую следующий код:

import tcod

tcod.console_set_custom_font('terminal16x16_gs_ro.png', 
                             tcod.FONT_TYPE_GREYSCALE | tcod.FONT_LAYOUT_ASCII_INROW)
cod.console_init_root(40, 40, 'My game', False)
tcod.sys_set_fps(60)

key = tcod.Key()
mouse = tcod.Mouse()

while not tcod.console_is_window_closed():
    # listen for user input, which sends CPU usage to 100%
    event = tcod.sys_check_for_event(tcod.EVENT_KEY_PRESS | tcod.EVENT_MOUSE, key, mouse)

    # do stuff
    some_handling_method(key, mouse)              

    # flush consoles to the window
    tcod.console_flush()

Как я могу решить эту проблему -

  • есть ли способ использовать sys_wait_for_event, пока не пройдет какое-то время, после чего я могу позволить игре обновлять свое состояние без ввода пользователя,

  • что-то не так с sys_check_for_event или

  • Я неправильно его использую?

Спасибо!

Обновление Мне кажется, есть ошибка в sys_check_for_event: она возвращает все события, кроме движений мыши.Я проверил это, посмотрев на (x, y) координаты в объекте mouse - даже когда эти числа меняются, выходные данные метода остаются 0, т.е. никаких событий.

...