くまのがっこう神経衰弱バトルではボタンの大きさに合わせてアクションの大きさを変えたり効果音を入れたりと細かい調整をしたかったので自分でボタンを作りました。タッチによる操作を受け付けるかどうかはフラグで管理しています。
HelloWorldScene.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" USING_NS_CC; class HelloWorld : public cocos2d::Layer { private: // タッチイベントの管理フラグ enum TouchControl { TOUCH_IDLE, TOUCH_ACTIVE } _touch; // ボタンのポインタ Sprite* _btn; Sprite* _btnHello; public: static cocos2d::Scene* createScene(); virtual bool init(); CREATE_FUNC(HelloWorld); // タッチイベントの処理 bool onTouchBegan(Touch* touches, Event *event); void onTouchMoved(Touch* touches, Event *event); void onTouchEnded(Touch* touches, Event *event); void onTouchCancelled(Touch* touches, Event *event); }; #endif // __HELLOWORLD_SCENE_H__ |
HelloWorldScene.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
#include "HelloWorldScene.h" Scene* HelloWorld::createScene() { auto scene = Scene::create(); auto layer = HelloWorld::create(); scene->addChild(layer); return scene; } bool HelloWorld::init() { if ( !Layer::init() ) { return false; } // ボタンの画像を表示 _btnHello = Sprite::create("HelloWorld.png"); this->addChild(_btnHello); // タッチイベントの処理をリスナーへ設定 auto listener = EventListenerTouchOneByOne::create(); listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this); listener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved, this); listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this); listener->onTouchCancelled = CC_CALLBACK_2(HelloWorld::onTouchCancelled, this); this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this); // タッチイベントの管理フラグを有効にする _touch = TOUCH_ACTIVE; return true; } bool HelloWorld::onTouchBegan(Touch* touch, Event *event) { // ボタンのポインタを初期化 _btn = nullptr; if (_touch == TOUCH_ACTIVE) { // タッチされた座標を取得 auto point = Director::getInstance()->convertToGL(touch->getLocationInView()); // ボタンの座標を確認 if (_btnHello->getBoundingBox().containsPoint(point)) { _btnHello->runAction(ScaleTo::create(0.1, 1.2)); _btn = _btnHello; } } return true; } void HelloWorld::onTouchMoved(Touch* touch, Event *event) { } void HelloWorld::onTouchEnded(Touch* touch, Event *event) { // タップされたボタン毎の処理 if (_btn == _btnHello) { _btnHello->runAction(Sequence::create( ScaleTo::create(0.1, 1.0), CallFunc::create([&](){ // ここにOKボタンの処理を書く }), nullptr)); } } void HelloWorld::onTouchCancelled(Touch* touch, Event *event) { if (_btn != nullptr) { _btn->runAction(ScaleTo::create(0.1, 1.0)); } } |
みんなどうしているんだろう(´・ω・`)