ボタンのクラスには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;
}
これで最低限ではありますがボタンとして機能すると思います!