6
6

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.

cocos2d-xAdvent Calendar 2013

Day 2

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

Posted at

ボタンのクラスにはCCMenuItemSpriteなどがありますが、
個人的には若干癖があって使いづらいと思っていました。

そこでCCSpriteでタッチを検知できるようにして
ボタンのようにしてみようと思い作ってみました。
https://gist.github.com/t-kashima/7749894

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

タッチを検知するため、CCTargetedTouchDelegateを継承してメソッドを追加します。

CustomButton.h
class CustomButton : public CCSprite, public CCTargetedTouchDelegate
{

private:
    virtual bool ccTouchBegan(CCTouch *touch, CCEvent *event);
    virtual void ccTouchMoved(CCTouch *touch, CCEvent *event);
    virtual void ccTouchEnded(CCTouch *touch, CCEvent *event);

タッチが検知されるようにDispatcherに登録します。
これでタッチされた時に上記のメソッドに飛んできます。

CustomButton.cpp
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);

最後に自分自身がタッチされたかどうかを判定して、
タッチされた時に画像を小さくしたりコールバックを呼び出すようにします。

CustomButton.cpp
bool CustomButton::ccTouchBegan(CCTouch *touch, CCEvent *event)
{
    CCPoint point = CCDirector::sharedDirector()->convertToGL(touch->getLocationInView());
    CCPoint convertedPoint = this->getParent()->convertToNodeSpace(point);

    bool isTouchInSide = this->boundingBox().containsPoint(convertedPoint);
    if (isTouchInSide) {
        CCLog("touchDown!!!");
    }
    return true;
}

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

6
6
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
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?