2012-01-30 3 views
2

Это для реализации игрового контроллера на клавиатуре. Стрелки влево/вправо перемещают персонажа. shift + left/right заставляет персонажа работать.Objective-C: Обнаружение нажатия «shift» при нажатии другой клавиши

Вот код, я использую до сих пор:

- (void)keyDown:(NSEvent *)event{ 

    if ([event modifierFlags] & NSShiftKeyMask) { 
     NSLog(@"Shift key pressed"); 
    } 
    // logic follows 
} 

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

Итак, я вижу такой ответ: https://stackoverflow.com/a/420691/987818

Но я не понять, где этот NSRsponder используется. Для информации я использую Cocos2D (движок игры objc).

спасибо за зацепки :-) J.

+1

Для примера реализации flagsChanged проверить выполнение KKInput из Kobold2D: https://github.com/kobold2d/Kobold2D/blob/master/Kobold2D/__Kobold2D__/kobold2d/KKInputKeyboard.m – LearnCocos2D

+0

@ LearnCocos2D Эй спасибо Штеффен. Этот файл KK просто решил все это! Отличный материал, теперь моя реализация CCLayer правильно обрабатывает ключ сдвига, используя событие ccFlagsChanged: (NSEvent *) встроенного (BOOL); Ницца! Хорошего дня. – Jem

ответ

3

Вы должны реализовать flagsChanged: в том же классе, где вы реализуете эту -keyDown: method, или просто любой NSResponder подкласс, который может быть в состоянии поймать это событие (например, NSApplication).

+0

Эй, спасибо. Действительно, теперь это работает! – Jem

Смежные вопросы