Как получить статус некоторых клавиш на клавиатуре на Mac? - PullRequest
1 голос
/ 23 августа 2011

Я использую cocos2d для Mac (1.0.1)

У меня есть эти два метода (которые похожи на яблочные)

//keyboard delegate is defined - these methods are called
- (BOOL)ccKeyDown:(NSEvent *)event {
    unichar key = [[event characters] characterAtIndex:0];
    if (key == NSDownArrowFunctionKey) {
        // Down arrow pressed
    }
    if(key == NSUpArrowFunctionKey) {
        // Up arrow pressed
        return YES;
    }
    if(key == NSLeftArrowFunctionKey) {
        // Left arrow pressed
       something = -1.0f;
        return YES;

    } else if(key == NSRightArrowFunctionKey) {
        // Right arrow pressed
       something = 1.0f;
        return YES;
    } 
    return NO;
}
-(BOOL)ccKeyUp:(NSEvent *)event {
    unichar key = [[event characters] characterAtIndex:0];
    if (key == NSDownArrowFunctionKey) {
        // Down arrow pressed
    }
    if(key == NSUpArrowFunctionKey) {
        // Up arrow pressed
    }
    if(key == NSLeftArrowFunctionKey || key == NSRightArrowFunctionKey) {
        // Left arrow pressed
       something = 0.0f;
    } 

    return YES;
}

Я хочу вызвать это:

something = 0.0f;

, если клавиша со стрелкой влево и клавиша со стрелкой вправо не нажаты / не удерживаются.Насколько я знаю, ccKeyUp будет вызываться, только если была нажата и отпущена клавиша.И ccKeyDown, если клавиша была нажата.

Как я могу получить текущее состояние клавиатуры, чтобы проверить несколько клавиш на их состояние?

1 Ответ

2 голосов
/ 24 октября 2011

Cocos2D не предлагает способ просто проверить состояния клавиш клавиатуры.

Kobold2D делает .С Kobold2D вы можете сделать что-то вроде этого:

KKInput* input = [KKInput sharedInput];
if ([input isKeyDown:KKKeyCode_LeftArrow] == NO && 
    [input isKeyDown:KKKeyCode_RightArrow] == NO)
{
    something = 0.0f;
}

Кроме того, просто как примечание, это плохая практика использовать символы для событий клавиатуры:

unichar key = [[event characters] characterAtIndex:0];

Проблема сэто означает, что языковой стандарт пользователя (язык ввода с клавиатуры) изменяет, какую клавишу или комбинацию клавиш нужно нажимать, чтобы сгенерировать этот символ.Например, в то время как клавиша / (косая черта) удобно расположена на клавиатурах США слева от клавиши вправо Shift, на немецких клавиатурах пользователям придется нажимать Shift + 7, чтобы выполнить действие, которое вы сопоставили символу /.Вы можете узнать больше об этом в моей статье о Правильная обработка событий клавиатуры Mac .

...