ここまでのやり方は、既に非推奨となっているので、いつ使えなくなるかわかりません。やはり、新しいやり方を覚えて使えるようになったほうがいいですね。
新しい方法は、ちょっとわかりにくくなっていますので順を追って説明しましょう。
1. イベントリスナーを用意するauto listener = EventListenerTouchOneByOne::create();
auto listener = EventListenerTouchAllAtOnce::create();
まず最初に、「
イベントリスナー」と呼ばれるインスタンスを用意します。これは、イベント発生時の処理を請け負う専用のオブジェクトです。タッチ関係のイベントリスナーとしては、シングルタッチの
EventListenerTouchOneByOneと、マルチタッチの
EventListenerTouchAllAtOnceが用意されています。まずはこのインスタンスを作成します。
2. イベント用プロパティに関数を設定する●EventListenerTouchOneByOneの場合listener->onTouchBegan = 関数;
listener->onTouchMoved = 関数;
listener->onTouchEnded = 関数;
listener->onTouchCancelled = 関数;
●EventListenerTouchAllAtOnceの場合listener->onTouchesBegan = 関数;
listener->onTouchesMoved = 関数;
listener->onTouchesEnded = 関数;
listener->onTouchesCancelled = 関数;
イベントリスナーには、それぞれのイベントに対応する
プロパティが用意されています。そのプロパティに、そのイベントが発生した時に呼び出される関数を設定します(関数をどう設定するのか?は、後で)。
例えば、シングルタッチで、タッチした瞬間に何かの処理を行わせたければ、
listener->onTouchBeganに関数を設定すればいいわけですね。これにより、タッチイベントが発生すると、そのイベントリスナーの
onTouchBeganに設定された関数が実行されるようになるのです。
3. イベントリスナーを組み込むthis->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);
イベントリスナーの準備ができたら、作成したイベントリスナーを組み込みます。これは、「
EventDespatcher」というものを使います。これが、さまざまなイベントとイベントリスナーをまとめて管理するオブジェクトです。
この
EventDespatcherは、
Layerの「
getEventDispatcher」で取得することができます。またの
EventDespatcherへのイベントリスナーの組み込みは、タッチイベント関係なら
addEventListenerWithSceneGraphPriorityというメソッドを使って行うことができます。
ということで、イベントリスナーの組み込みは、
this-> getEventDispatcher()-> addEventListenerWithSceneGraphPriorityといった長ったらしいものになります。ちょっとわかりにくいですが、「こう書けばいい」と丸暗記してしまいましょう。