cocos2d-x 3.0系でのScrollViewとTouch処理のメモ
自メモ)
cocos2d-x 3.0 EventListenerTouchAllAtOnce の使い方わからん>< URL 参考にしても[ Assert failed: Layer#ccTouchBegan override me ]で取れん
@kimukou2628 このAssertはLayerクラス継承したHogeSceneクラスとかで、onTouchBeganオーバーライドしてくださいーって内容ですね。
http://twitter.com/k_yokomi/status/453818022495416320:twitter:detail:right
@k_yokomi 一応 ccTouchesBegan は上書きしてるのですが、ccTouchBegan だと EventListenerTouchOneByOne だと ccTouchBeganで動くのは確認済みなのですが ピンチインピンチアウトを実現するには、、ってかんじ
2014-04-09 18:56:22 via YoruFukurou to @k_yokomi
@k_yokomi ただ対象のLayer を ScrollViewでくるんでるので、ScrollViewの内部に定義されてる EventListenerTouchOneByOneの方に影響されてるっぽいかなーという感じです(extensions/GUI/CCScrollView
2014-04-09 19:12:40 via YoruFukurou to @k_yokomi
cocos2d-x 3.0 ScrollView結構酷い><。ScrollView::initWithViewSizeで _minScale = _maxScale = 1.0f; となってるからピンチイン・ピンチアウトが封じられてるのか。いじるには継承するしかないかな(汗
ScrollViewに関して)
だけだとAnd版では参照エラーが出る
- HelloWorld.cpp等
#include "extensions/cocos-ext.h" USING_NS_CC_EXT;
に加えて
- Android.mk
$(call import-module,2d) $(call import-module,extensions)//追加 $(call import-module,audio/android)
の追記が必要 *1
ちなみに
の話のEventListenerTouchAllAtOnce(マルチタッチ)とScrollViewを合わせるとうまく動かない
そもそも EventListenerTouchOneByOne でもマルチタッチとれるしな。。
ScrollViewのoveride>
- MyScrollView.h
#ifndef __MY_SCROLL_VIEW_H__ #define __MY_SCROLL_VIEW_H__ //ScrollView用 #include "extensions/cocos-ext.h" minScale/maxScale の追加 NS_CC_EXT_BEGIN; class MyScrollView: public ScrollView { public: static MyScrollView* create(Size size, Node* container = NULL); static MyScrollView* create(); MyScrollView(); virtual ~MyScrollView(); void minScale(float value); void maxScale(float value); }; NS_CC_EXT_END #endif /* __MY_SCROLL_VIEW_H__ */
- MyScrollView.cpp
#include "MyScrollView.h" #include "extensions/ExtensionMacros.h" NS_CC_EXT_BEGIN //see http://slashdot.jp/journal/311876/%E8%A6%9A%E3%81%88%E6%9B%B8%E3%81%8D%EF%BC%9AC%2B%2B%E3%81%AE%E3%82%B3%E3%83%B3%E3%82%B9%E3%83%88%E3%83%A9%E3%82%AF%E3%82%BF%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8B%E6%B3%A8%E6%84%8F%E7%82%B9 MyScrollView::MyScrollView() :ScrollView() { } MyScrollView::~MyScrollView() { } MyScrollView* MyScrollView::create(Size size, Node* container/* = NULL*/) { MyScrollView* pRet = new MyScrollView(); if (pRet && pRet->initWithViewSize(size, container)) { pRet->autorelease(); } else { CC_SAFE_DELETE(pRet); } return pRet; } MyScrollView* MyScrollView::create() { MyScrollView* pRet = new MyScrollView(); if (pRet && pRet->init()) { pRet->autorelease(); } else { CC_SAFE_DELETE(pRet); } return pRet; } void MyScrollView::minScale(float value){ _minScale = value; } void MyScrollView::maxScale(float value){ _maxScale = value; } NS_CC_EXT_END
実際の使う箇所の初期化例)
☆に関してはなんか納得がいかない対応orz
MyScrollView* pScrollView = nullptr; bool ViewController::init() { //〜略〜 //画面サイズでスクロールビューを作る pScrollView = MyScrollView::create( Size(visibleSize.width, visibleSize.height - 200)//☆Menuを上部に入れる場合スクロールエリアを減らす(左下が0,0なので) ); pScrollView->setPosition( ccp(-16,-16) //☆なんか左下に埋もれるので補正が必要っぽい //Point::ZERO ); //pScrollView->setPosition(Point::ZERO); pScrollView->setBounceable(true);//ぴょんと動くか否か pScrollView->minScale(1.0f); pScrollView->maxScale(3.0f); this->addChild(pScrollView); //パネルの登録 init_panel(); //〜略〜 } void ViewController::init_panel(){ auto game_view = GameViewController::create(); Size size = game_view->getContentSize(); CCLOG(">>>> ViewController::init_panel <pre>(%f,%f)",size.width,size.height); pScrollView->setContainer(game_view); pScrollView->setContentSize(size); Size chk_size = pScrollView->getContentSize(); CCLOG(">>>> ViewController::init_panel <aft>(%f,%f)",chk_size.width,chk_size.height); }