タッチイベントを利用しよう! (1/6)
作成:2015-06-13 10:43
更新:2015-06-13 10:43
更新:2015-06-13 10:43
■setTouchModeとsetTouchEnabled
Cocos2D-xでは、画面タッチに関するイベントの処理はいくつかの実装方法が用意されています。
もっともシンプルなのは、cocos2d::Layerに用意されている「setTouchMode」と「setTouchEnabled」を利用するやり方です。これは非常にシンプルでいいのですが、実はver. 3.0からはDeprecated(非推奨)となっています。つまり「古いやり方」なんですね。でもまぁ、まだ使えなくなったわけではありませんし、未だにそこそこ使われていたりするので、ここで簡単にまとめておくことにしましょう。
●タッチモードの設定
※利用可能な定数
kCCTouchesOneByOne――シングルタップにする
kCCTouchesAllAtOnce――マルチタップにする
●タッチを許可する
たったこれだけでタッチイベントが使えるようになってしまいます。では、タッチした時はどうやって処理するばいいのか? それは、あらかじめ定義されていたメソッドを用意しオーバーラどすればいいのです。
●タッチ開始時に呼び出されるメソッド
●タッチ中に位置が動いたら呼び出されるメソッド
●タッチ終了(指を離した)時に呼び出されるメソッド
●タッチ操作がキャンセルされたときのイベント
2つずつメソッドがありますが、「onTouch~」がシングルタッチ用、「onTouches~」がマルチタッチ用になります。これらのメソッドを用意し、そこに処理を書くだけで、タッチ操作による処理が行えるようになる、というわけです。実に安直ですね!
では、実際に試してみましょう。まず、ヘッダーファイルに必要な変数とメソッドの宣言を用意しておきます。前回まで利用していたHelloWorldクラスのヘッダーファイル(HelloWorldScene.h)を下のように書き換えてみてください。
ここでは、countとlabelという変数、そしてonTouchBeganメソッドを追記してあります。これで、タッチした回数をカウントし表示しよう、というわけです。
もっともシンプルなのは、cocos2d::Layerに用意されている「setTouchMode」と「setTouchEnabled」を利用するやり方です。これは非常にシンプルでいいのですが、実はver. 3.0からはDeprecated(非推奨)となっています。つまり「古いやり方」なんですね。でもまぁ、まだ使えなくなったわけではありませんし、未だにそこそこ使われていたりするので、ここで簡単にまとめておくことにしましょう。
●タッチモードの設定
this->setTouchMode( 定数 );
※利用可能な定数
kCCTouchesOneByOne――シングルタップにする
kCCTouchesAllAtOnce――マルチタップにする
●タッチを許可する
this->setTouchEnabled( 真偽値 );
たったこれだけでタッチイベントが使えるようになってしまいます。では、タッチした時はどうやって処理するばいいのか? それは、あらかじめ定義されていたメソッドを用意しオーバーラどすればいいのです。
●タッチ開始時に呼び出されるメソッド
bool onTouchBegan(cocos2d::Touch* touch, cocos2d::Event* event);
bool onTouchesBegan(cocos2d::Touch* touch, cocos2d::Event* event);
●タッチ中に位置が動いたら呼び出されるメソッド
onTouchMoved(cocos2d::Touch* touch, cocos2d::Event* event);
onTouchesMoved(cocos2d::Touch* touch, cocos2d::Event* event);
●タッチ終了(指を離した)時に呼び出されるメソッド
onTouchEnded(cocos2d::Touch* touch, cocos2d::Event* event);
onTouchesEnded(cocos2d::Touch* touch, cocos2d::Event* event);
●タッチ操作がキャンセルされたときのイベント
onTouchCancelled(cocos2d::Touch* touch, cocos2d::Event* event);
onTouchesCancelled(cocos2d::Touch* touch, cocos2d::Event* event);
2つずつメソッドがありますが、「onTouch~」がシングルタッチ用、「onTouches~」がマルチタッチ用になります。これらのメソッドを用意し、そこに処理を書くだけで、タッチ操作による処理が行えるようになる、というわけです。実に安直ですね!
では、実際に試してみましょう。まず、ヘッダーファイルに必要な変数とメソッドの宣言を用意しておきます。前回まで利用していたHelloWorldクラスのヘッダーファイル(HelloWorldScene.h)を下のように書き換えてみてください。
ここでは、countとlabelという変数、そしてonTouchBeganメソッドを追記してあります。これで、タッチした回数をカウントし表示しよう、というわけです。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
// ※HelloWorldScene.h #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" class HelloWorld : public cocos2d::Layer { private: int count; cocos2d::Label* label; public: static cocos2d::Scene* createScene(); virtual bool init(); bool onTouchBegan(cocos2d::Touch* touch, cocos2d::Event* event); CREATE_FUNC(HelloWorld); }; #endif // __HELLOWORLD_SCENE_H__
※関連コンテンツ
「初心者のためのCocos2d-xゲームプログラミング入門」に戻る