7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

簡単なカスタムボタンの作り方

Last updated at Posted at 2014-12-20

去年のAdvent Calendarもカスタムボタンを作ったのですが、Cocos2d-xの3系が盛り上がっているので、今回はCocos2d-x 3.2を使ってカスタムボタンを作りました。
https://gist.github.com/t-kashima/0c6c51c90d3df02f2631

ここではそのポイントを紹介します。

まずは以下のコードでタッチのリスナーを作ります。

CustomButton.cpp
 auto listener = EventListenerTouchOneByOne::create();

次にそれぞれのタッチの状況に応じて、タッチされた時のコールバックを設定します。
「onTouchBegan」-> タッチされた時
「onTouchMoved」-> タッチが動いた時
「onTouchEnded」-> タッチが離された時

ラムダ式が使えるのでとても簡単にコールバックが書けますね。

CustomButton.cpp
listener->onTouchBegan = [this](Touch *touch, Event *event) {
 
    log("onTouchBegan");
    
    // タッチされた場所を取得する
    Vec2 touchPos = touch->getLocation();
        
    // このオブジェクトがタッチされているかの判定
    bool isTouchInSide = this->getBoundingBox().containsPoint(touchPos);
    if (isTouchInSide) {
        
        // タッチされた時に縮めて小さくする
        this->setScale(0.9f);
        this->setColor(Color3B::GRAY);
           
        return true;
    }
        
    return false;
};
    
listener->onTouchMoved = [this](Touch *touch, Event *event) {
    log("onTouchMoved");
};
    
listener->onTouchEnded = [this](Touch *touch, Event *event) {

    log("onTouchEnded");
        
    
    // タッチが離れた時に元に戻す
    this->setScale(1.0f);
    this->setColor(Color3B::WHITE);
};

「onTouchBegan」の中では自分自身がタッチされているかを判定して、タッチされている場合は、少し小さくしてグレーにしています。「onTouchEnded」で元の大きさと色に戻しています。

最後にさきほど作ったタッチのリスナーを登録します。

CustomButton.cpp
getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);

これで最低限ではありますが、ボタンとして機能すると思います!

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?