ページ 11

cocoa、複数キー入力の取得

Posted: 2014年2月11日(火) 02:12
by bonbo
cocoaでキーイベントを受け取ろうと思い
以下のようなコードをかいたのですが、
これだと同時に複数のキーを取得することができません。
どうすればよいのでしょうか。

コード:

- (void)keyDown:(NSEvent*)event
{
    if ([event keyCode]==1){
        NSLog(@"key 's' is now being get pressed.");
    }
    if ([event keyCode]==2){
        NSLog(@"key 'd' is now being get pressed.");
    }
}
// 当然これだと片方のキーのチェックしかできない
// 環境はXcode5.0.2,
Mac64bitにて動作させています。

よろしくお願いします。

Re: cocoa、複数キー入力の取得

Posted: 2014年2月11日(火) 21:45
by h2so5
キー状態を記録する配列か辞書配列を用意して、keyDownイベントとkeyUpイベントでフラグを切り替えて状態を記憶しておけば複数キーの状態を検出できます。

CocoaDev » Gamekeyboardhandling

Re: cocoa、複数キー入力の取得

Posted: 2014年2月12日(水) 09:36
by bonbo
>h2so5さん
ありがとうございます。
返信が遅れてしまい申し訳ありません。

コード:

KeyM[256];
- (void)keyDown:(NSEvent*)event
{
    if ([event keyCode]==1){
        Key[1]=1;
    }
    if ([event keyCode]==2){
        Key[2]=1;
    }
}
- (void)keyUp:(NSEvent*)event
{
    if ([event keyCode]==1){
        Key[1]=0;
    }
    if ([event keyCode]==2){
        Key[2]=0;
    }
}
一応できました。
ただし、これだとSキー,Dキーを同時に押したときは
どちらかになってしまいます。
何か対策はありますでしょうか。

Re: cocoa、複数キー入力の取得

Posted: 2014年2月12日(水) 09:43
by bonbo
済みません、キーごとに何度も呼び出されるのですね。
勘違いしていました。前記の問題は解決しました。
ありがとうございました。