タッチイベントを利用しよう! (2/6)
作成:2015-06-13 10:45
更新:2015-06-13 10:45
更新:2015-06-13 10:45
■タッチした時の処理を実装する
では、処理の実装を行いましょう。下に、HelloworldScene.cppのソースコードを掲載しておきました。このように書き換え、ビルドして実行してみましょう。
画面の左下に「Hello World」と表示されているだけのシンプルなアプリです。画面の適当なところをクリックしてみましょう。「No, 1」というように表示が変わります。そのまま何度もクリックしていくと、No,2、No,3……という具合に数字が増えていきます。
ここでは、まずinitメソッド内でタッチイベントを許可しています。
そして、以下のメソッドでタッチ時の処理を実装しています。
cocos2d::Stringインスタンスを作り、appendWithFormatでテキストをつなげて、それをLabelのsetStringに設定する、という処理をしているだけです。テキスト関係の処理は前に説明しましたね。
このメソッドで注目すべきは、返値です。これはイベントの消費に関する設定を行うのに使われます。trueを返すと、そのままイベントは送られていき、その後のonTouchMovedやonTouchEndedといったイベントが発生します。falseを返すとイベントはこの時点で消費されてしまい、その後にあるonTouchMovedなどのイベントは発生しなくなります。
画面の左下に「Hello World」と表示されているだけのシンプルなアプリです。画面の適当なところをクリックしてみましょう。「No, 1」というように表示が変わります。そのまま何度もクリックしていくと、No,2、No,3……という具合に数字が増えていきます。
ここでは、まずinitメソッド内でタッチイベントを許可しています。
this->setTouchMode(kCCTouchesOneByOne);
this->setTouchEnabled(true);
そして、以下のメソッドでタッチ時の処理を実装しています。
bool HelloWorld::onTouchBegan(cocos2d::Touch* touch, cocos2d::Event* event)
{
auto str = String::create("No, ");
str.appendWithFormat("%i", count++);
label->setString(str.getCString());
return true;
}
cocos2d::Stringインスタンスを作り、appendWithFormatでテキストをつなげて、それをLabelのsetStringに設定する、という処理をしているだけです。テキスト関係の処理は前に説明しましたね。
このメソッドで注目すべきは、返値です。これはイベントの消費に関する設定を行うのに使われます。trueを返すと、そのままイベントは送られていき、その後のonTouchMovedやonTouchEndedといったイベントが発生します。falseを返すとイベントはこの時点で消費されてしまい、その後にあるonTouchMovedなどのイベントは発生しなくなります。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
// ※HelloWorldScene.cpp
#pragma execution_character_set("utf-8")
#include "HelloWorldScene.h"
USING_NS_CC;
Scene* HelloWorld::createScene()
{
auto scene = Scene::create();
auto layer = HelloWorld::create();
scene->addChild(layer);
return scene;
}
bool HelloWorld::init()
{
if (!Layer::init())
{
return false;
}
Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
Director::getInstance()->setDisplayStats(false); // stats OFF
count = 0;
this->setTouchMode(kCCTouchesOneByOne);
this->setTouchEnabled(true);
label = Label::createWithTTF("Hello World", "fonts/Marker Felt.ttf", 96);
label->setPosition(Vec2(origin.x + 50, origin.y + 50));
label->setAnchorPoint(Vec2(0, 0));
this->addChild(label, 1);
return true;
}
bool HelloWorld::onTouchBegan(cocos2d::Touch* touch, cocos2d::Event* event)
{
auto str = String::create("No, ");
str.appendWithFormat("%i", count++);
label->setString(str.getCString());
return true;
}
※関連コンテンツ
「初心者のためのCocos2d-xゲームプログラミング入門」に戻る