libro
www.tuyano.com
初心者のためのCocos2d-xゲームプログラミング入門

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

作成:2015-06-13 10:45
更新:2015-06-13 10:45

■タッチした時の処理を実装する

では、処理の実装を行いましょう。下に、HelloworldScene.cppのソースコードを掲載しておきました。このように書き換え、ビルドして実行してみましょう。

画面の左下に「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を返すと、そのままイベントは送られていき、その後のonTouchMovedonTouchEndedといったイベントが発生します。falseを返すとイベントはこの時点で消費されてしまい、その後にあるonTouchMovedなどのイベントは発生しなくなります。

※プログラムリストが表示されない場合

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ゲームプログラミング入門」に戻る