Как я могу изменить статус KMOD для одного ключа в Pygame? - PullRequest
1 голос
/ 13 июня 2011

Вот что я получил до сих пор:

for event in pygame.event.get():
    if event.type == KEYDOWN:
        if event.key == K_LEFT:
            mods = pygame.key.get_mods()
            if mods and KMOD_SHIFT:
                movei = -5
            if mods and KMOD_CTRL:
                movei = -20
            else:
                movei = -10

Проблема в том, что кажется, что он берет только одно или другое (KMOD_SHIFT или KMDO_CTRL) ВСЕ ВРЕМЯ, а не выборочно.Поэтому не имеет значения, на какой модификатор я нажимаю (shift, alt, ctrl и т. Д.), Эффект остается прежним.

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

Заранее спасибо.

1 Ответ

1 голос
/ 15 июня 2011

Вы используете логический and оператор, в то время как вам действительно нужен побитовый оператор &. Вместо

if mods and KMOD_SHIFT:

хочешь

if mods & KMOD_SHIFT:

Логический and будет возвращать значение второго операнда до тех пор, пока первый операнд имеет истинное значение (в этом случае, не равное 0). Оператор & будет выполнять побитовую операцию И и поэтому будет возвращать ненулевое значение (логически интерпретированное как истина), только если некоторые из битов из константы KMOD включены в переменную mods.

...