cocos2dというとiOSのゲームエンジンというイメージが強いですが、Mac用のゲーム開発にも使う事ができます。iOSアプリではインプットにタップイベントや加速度センサーを使うのに対し、Macアプリではキーボードやマウスを使うのが一般的です。
キーボードイベントを受け取れるようにする
キーボードイベントは各レイヤー(CCLayer)毎に受け取る事ができますが、標準ではキーボードイベントは受け取らない設定になっています。
-(id) init { if( (self=[super init])) { ... self.isKeyboardEnabled = YES; } return self; }
レイヤーのイニシャライザの中などで、isKeyboardEnabledプロパティをYESにセットします。
キーダウン/キーアップの検知
CCKeyboardEventDelegateプロトコルには下記のデリゲートメソッドが定義されています。
-(BOOL) ccKeyUp:(NSEvent*)event; -(BOOL) ccKeyDown:(NSEvent*)event;
レイヤーにこの二つのデリゲートメソッドを定義することでキーが押された/離されたことを検知することができます。
-(BOOL) ccKeyUp:(NSEvent*)event { NSLog(@"KeyUp %d", event.keyCode); return NO; } -(BOOL) ccKeyDown:(NSEvent*)event { NSLog(@"KeyDown: %d", event.keyCode); return NO; }
どのキーが押されたかの判定には引数eventに含まれる情報を使用します。この二つのデリゲートメソッドはBOOL型の返り値を返します。YESを返すようにすると、そのキーボードイベントは他のレイヤーには通知されないようになります。