Я создаю игру на 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
, т.е. никаких событий.