back

タッチイベントを利用しよう! (3/6)

■v. 3.0からのイベントの組み込み方

ここまでのやり方は、既に非推奨となっているので、いつ使えなくなるかわかりません。やはり、新しいやり方を覚えて使えるようになったほうがいいですね。

新しい方法は、ちょっとわかりにくくなっていますので順を追って説明しましょう。

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にしてみてください。


   

記事のリストに戻る



PC Site G+ mail