Objective-C: обнаружение нажатия клавиши Shift при нажатии другой клавиши

Это сделано для реализации игрового контроллера на основе клавиатуры. Стрелки влево / вправо заставляют персонажа ходить. shift + left / right заставляет персонажа бежать.

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

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

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

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

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

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

спасибо за любые подсказки :-) J.


person Jem    schedule 30.01.2012    source источник
comment
Для примера реализации flagsChanged ознакомьтесь с реализацией KKInput Kobold2D: github.com/kobold2d/Kobold2D/blob/master/Kobold2D / __ Kobold2D __ /   -  person LearnCocos2D    schedule 31.01.2012
comment
@ LearnCocos2D Привет, спасибо, Штеффен. Этот файл KK просто решил все это! Отличный материал, теперь моя реализация CCLayer правильно обрабатывает клавишу Shift, используя встроенное событие - (BOOL) ccFlagsChanged: (NSEvent *); Отлично! Хорошего дня.   -  person Jem    schedule 31.01.2012


Ответы (1)


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

person kennytm    schedule 30.01.2012