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を返すようにすると、そのキーボードイベントは他のレイヤーには通知されないようになります。