タッチイベントを利用しよう! (3/6)
作成:2015-06-13 10:48
更新:2015-06-13 10:48
更新:2015-06-13 10:48
■v. 3.0からのイベントの組み込み方
ここまでのやり方は、既に非推奨となっているので、いつ使えなくなるかわかりません。やはり、新しいやり方を覚えて使えるようになったほうがいいですね。
新しい方法は、ちょっとわかりにくくなっていますので順を追って説明しましょう。
1. イベントリスナーを用意する
まず最初に、「イベントリスナー」と呼ばれるインスタンスを用意します。これは、イベント発生時の処理を請け負う専用のオブジェクトです。タッチ関係のイベントリスナーとしては、シングルタッチのEventListenerTouchOneByOneと、マルチタッチのEventListenerTouchAllAtOnceが用意されています。まずはこのインスタンスを作成します。
2. イベント用プロパティに関数を設定する
●EventListenerTouchOneByOneの場合
●EventListenerTouchAllAtOnceの場合
イベントリスナーには、それぞれのイベントに対応するプロパティが用意されています。そのプロパティに、そのイベントが発生した時に呼び出される関数を設定します(関数をどう設定するのか?は、後で)。
例えば、シングルタッチで、タッチした瞬間に何かの処理を行わせたければ、listener->onTouchBeganに関数を設定すればいいわけですね。これにより、タッチイベントが発生すると、そのイベントリスナーのonTouchBeganに設定された関数が実行されるようになるのです。
3. イベントリスナーを組み込む
イベントリスナーの準備ができたら、作成したイベントリスナーを組み込みます。これは、「EventDespatcher」というものを使います。これが、さまざまなイベントとイベントリスナーをまとめて管理するオブジェクトです。
このEventDespatcherは、Layerの「getEventDispatcher」で取得することができます。またのEventDespatcherへのイベントリスナーの組み込みは、タッチイベント関係ならaddEventListenerWithSceneGraphPriorityというメソッドを使って行うことができます。
ということで、イベントリスナーの組み込みは、this-> getEventDispatcher()-> addEventListenerWithSceneGraphPriorityといった長ったらしいものになります。ちょっとわかりにくいですが、「こう書けばいい」と丸暗記してしまいましょう。
新しい方法は、ちょっとわかりにくくなっていますので順を追って説明しましょう。
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といった長ったらしいものになります。ちょっとわかりにくいですが、「こう書けばいい」と丸暗記してしまいましょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
※関連コンテンツ
「初心者のためのCocos2d-xゲームプログラミング入門」に戻る