cocos2dx ScrollView 测试一 触摸事件优先级和自动调整
直接上代码
MyScrollView.h
1 // 2 // MyScrollView.h 3 // ScrollViewTest 4 // 5 // Created by HanHongmin on 14-1-1. 6 // 7 // 8 9 #ifndef __ScrollViewTest__MyScrollView__ 10 #define __ScrollViewTest__MyScrollView__ 11 12 #include "cocos2d.h" 13 #include "cocos-ext.h" 14 using namespace cocos2d; 15 using namespace cocos2d::extension; 16 17 class MyScrollView:public CCScrollView{ 18 public: 19 static MyScrollView* create(); 20 static MyScrollView* create(CCSize size); 21 virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent); 22 virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent); 23 virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent); 24 virtual void adjustScrollView(); 25 }; 26 27 #endif /* defined(__ScrollViewTest__MyScrollView__) */
MyScrollView.cpp
1 // 2 // MyScrollView.cpp 3 // ScrollViewTest 4 // 5 // Created by HanHongmin on 14-1-1. 6 // 7 // 8 9 #include "MyScrollView.h" 10 11 12 MyScrollView* MyScrollView::create() 13 { 14 MyScrollView* pRet = new MyScrollView(); 15 if (pRet && pRet->init()) 16 { 17 pRet->autorelease(); 18 } 19 else 20 { 21 CC_SAFE_DELETE(pRet); 22 } 23 return pRet; 24 } 25 26 MyScrollView* MyScrollView::create(CCSize size) 27 { 28 MyScrollView* pRet = new MyScrollView(); 29 if (pRet && pRet->initWithViewSize(size, NULL)) 30 { 31 pRet->autorelease(); 32 } 33 else 34 { 35 CC_SAFE_DELETE(pRet); 36 } 37 return pRet; 38 } 39 40 41 42 bool MyScrollView::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent){ 43 bool b = CCScrollView::ccTouchBegan(pTouch, pEvent); 44 CCLog("MyScrollView::ccTouchBegan"); 45 return b; 46 } 47 void MyScrollView::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent){ 48 CCScrollView::ccTouchMoved(pTouch, pEvent); 49 CCLog("MyScrollView::ccTouchMoved"); 50 //阻止传递 51 } 52 void MyScrollView::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent){ 53 CCScrollView::ccTouchEnded(pTouch, pEvent); 54 CCLog("MyScrollView::ccTouchEnded"); 55 adjustScrollView(); 56 //不在往下传递事件 57 } 58 59 void MyScrollView::adjustScrollView(){ 60 // 关闭CCScrollView中的自调整 61 this->unscheduleAllSelectors(); 62 63 int x = this->getContentOffset().x; 64 int offset = (int) x % 640; 65 // 调整位置 66 CCPoint adjustPos; 67 // 调整动画时间 68 float adjustAnimDelay = 0.15f; 69 70 if (offset < -320) {//翻到下一页 71 // 计算下一页位置,时间 72 adjustPos = ccpSub(this->getContentOffset(), ccp(640 + offset, 0)); 73 } 74 else {//留在当前页 75 // 计算当前页位置,时间 76 adjustPos = ccpSub(this->getContentOffset(), ccp(offset, 0)); 77 } 78 if(adjustPos.x< -(this->getContentSize().width-640)){//超过最后一页的限制 79 adjustPos = CCPointMake(-(this->getContentSize().width-640), 0); 80 } 81 // 调整位置 82 this->setContentOffsetInDuration(adjustPos, adjustAnimDelay); 83 }