cocos2dx 屏幕滑动(ScrollViewDelegate、TableViewDelegate)和屏幕触摸响应

前端之家收集整理的这篇文章主要介绍了cocos2dx 屏幕滑动(ScrollViewDelegate、TableViewDelegate)和屏幕触摸响应前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1.ScrollView

  1. using namespace cocos2d;
  2. using namespace cocos2d::extension;
  3.  
  4. bool GalleryLayer::init()
  5. {
  6. bool bRet = false;
  7. do
  8. {
  9. CC_BREAK_IF( !CCLayer::init() );
  10.  
  11. m_nCurPage = 1;
  12. CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
  13. CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();
  14.  
  15. Layer *pLayer = Layer::create();
  16. char helpstr[30] = {0};
  17. for (int i = 1; i <= 5; ++ i)
  18. {
  19. memset(helpstr,sizeof(helpstr));
  20. sprintf(helpstr,"bg_%02d.jpg",i);
  21. Sprite *pSprite = Sprite::create(helpstr,Rect(300,1600,1080));
  22. pSprite->setScaleX(visibleSize.width / pSprite->getContentSize().width);
  23. pSprite->setScaleY(visibleSize.height / pSprite->getContentSize().height);
  24. pSprite->setAnchorPoint(Vec2::ZERO);
  25. pSprite->setPosition(Vec2(visibleSize.width * ( i -1),0));
  26. pLayer->addChild(pSprite);
  27. }
  28. m_pScrollView = ScrollView::create(CCSizeMake(360,640),pLayer);
  29. m_pScrollView->setContentOffset(Vec2::ZERO);
  30. m_pScrollView->setTouchEnabled(false);
  31. m_pScrollView->setDelegate(this);
  32. m_pScrollView->setDirection(ScrollView::Direction::HORIZONTAL);
  33. pLayer->setContentSize(CCSizeMake(360*5,640));
  34.  
  35. this->addChild(m_pScrollView);
  36.  
  37. /* CCSpriteFrameCache *pCache = CCSpriteFrameCache::sharedSpriteFrameCache();
  38. pCache->addSpriteFrame(CCSpriteFrame::create("button_normal.png",CCRectMake(0,64,64)),"button_normal.png");
  39. pCache->addSpriteFrame(CCSpriteFrame::create("button_selected.png","button_selected.png");
  40. for (int i = 1; i <= 5; ++ i)
  41. {
  42. CCSprite *pPoint = CCSprite::createWithSpriteFrameName("button_normal.png");
  43. pPoint->setTag(i);
  44. pPoint->setPosition(ccp( origin.x + (visibleSize.width - 3 * pPoint->getContentSize().width)/2 + pPoint->getContentSize().width * (i-1),origin.y + 30));
  45. this->addChild(pPoint);
  46. }
  47. CCSprite *pPoint = (CCSprite *)this->getChildByTag(1);
  48. pPoint->setDisplayFrame(pCache->spriteFrameByName("button_selected.png"));*/
  49. bRet = true;
  50. }while(0);
  51.  
  52.  
  53.  
  54. auto listener = EventListenerTouchOneByOne::create();
  55. listener->onTouchBegan = CC_CALLBACK_2(GalleryLayer::TouchBegan,this);
  56. listener->onTouchMoved = CC_CALLBACK_2(GalleryLayer::TouchMoved,this);
  57. listener->onTouchEnded = CC_CALLBACK_2(GalleryLayer::TouchEnded,this);
  58. listener->onTouchCancelled = CC_CALLBACK_2(GalleryLayer::TouchCancelled,this);
  59.  
  60. _eventDispatcher->addEventListenerWithSceneGraPHPriority(listener,this);
  61.  
  62. return bRet;
  63. }
  64.  
  65. void GalleryLayer::menuCloseCallback(CCObject* pSender)
  66. {
  67.  
  68. }
  69.  
  70. void GalleryLayer::scrollViewDidScroll(cocos2d::extension::ScrollView *view)
  71. {
  72. CCLOG("scroll");
  73. }
  74.  
  75. void GalleryLayer::scrollViewDidZoom(cocos2d::extension::ScrollView *view)
  76. {
  77. CCLOG("zoom");
  78. }
  79.  
  80. void GalleryLayer::onEnter()
  81. {
  82. CCLayer::onEnter();
  83. //CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,1,false);
  84. }
  85.  
  86. void GalleryLayer::onExit()
  87. {
  88. //CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);
  89. CCLayer::onExit();
  90. CCSpriteFrameCache::sharedSpriteFrameCache()->removeUnusedSpriteFrames();
  91. }
  92.  
  93.  
  94. bool GalleryLayer::TouchBegan(CCTouch *pTouch,CCEvent *pEvent)
  95. {
  96. m_touchPoint = CCDirector::sharedDirector()->convertToGL(pTouch->getLocationInView());
  97. return true;
  98. }
  99.  
  100. void GalleryLayer::TouchMoved(CCTouch *pTouch,CCEvent *pEvent)
  101. {
  102. //m_pScrollView->ccTouchMoved(pTouch,pEvent);
  103.  
  104. //m_pScrollView->setContentOffset(Vec2::ZERO);
  105. }
  106.  
  107. void GalleryLayer::TouchEnded(CCTouch *pTouch,CCEvent *pEvent)
  108. {
  109. CCPoint endPoint = CCDirector::sharedDirector()->convertToGL(pTouch->getLocationInView());
  110. float distance = endPoint.x - m_touchPoint.x;
  111. //if(fabs(distance) > 20)
  112. //{
  113. adjustScrollView(distance);
  114. //}
  115. }
  116.  
  117. void GalleryLayer::TouchCancelled(cocos2d::CCTouch *pTouch,cocos2d::CCEvent *pEvent)
  118. {
  119. CCPoint endPoint = CCDirector::sharedDirector()->convertToGL(pTouch->getLocationInView());
  120. float distance = endPoint.x - m_touchPoint.x;
  121. //if(fabs(distance) > 20)
  122. //{
  123. adjustScrollView(distance);
  124. //}
  125. }
  126.  
  127. void GalleryLayer::adjustScrollView(float offset)
  128. {
  129. CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
  130. CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();
  131. //CCSpriteFrameCache *pCache = CCSpriteFrameCache::sharedSpriteFrameCache();
  132. //CCSprite *pPoint = (CCSprite *)this->getChildByTag(m_nCurPage);
  133. //if(!pPoint)
  134. //{
  135. // return;
  136. //}
  137.  
  138. /*if (fabs(offset) < 180)
  139. {
  140.  
  141. }
  142. else */if (offset < 0)
  143. {
  144. m_nCurPage ++;
  145. }
  146. else
  147. {
  148. m_nCurPage --;
  149. }
  150.  
  151. if (m_nCurPage < 1)
  152. {
  153. m_nCurPage = 1;
  154. }
  155. if(m_nCurPage > 5)
  156. {
  157. m_nCurPage = 5;
  158. }
  159. //pPoint = (CCSprite *)this->getChildByTag(m_nCurPage);
  160. //pPoint->setDisplayFrame(pCache->spriteFrameByName("button_selected.png"));
  161. CCPoint adjustPos = ccp(origin.x - visibleSize.width * (m_nCurPage-1),0);
  162. //m_pScrollView->setContentOffsetInDuration(adjustPos,0.3f);
  163. m_pScrollView->setContentOffset(adjustPos);
  164. }


  1. #ifndef __HELP_SCENE_H__
  2. #define __HELP_SCENE_H__
  3.  
  4. #include "cocos2d.h"
  5. #include "SimpleAudioEngine.h"
  6. #include "extensions/cocos-ext.h"
  7.  
  8. USING_NS_CC;
  9. USING_NS_CC_EXT;
  10.  
  11.  
  12. class GalleryLayer : public cocos2d::CCLayer,public ScrollViewDelegate
  13. {
  14. public:
  15. virtual bool init();
  16.  
  17. void menuCloseCallback(CCObject* pSender);
  18.  
  19. CREATE_FUNC(GalleryLayer);
  20.  
  21. public:
  22. //scrollview滚动的时候会调用
  23. void scrollViewDidScroll(ScrollView* view);
  24. //scrollview缩放的时候会调用
  25. void scrollViewDidZoom(ScrollView* view);
  26.  
  27. virtual void onEnter();
  28. virtual void onExit();
  29.  
  30. virtual bool TouchBegan(CCTouch *pTouch,CCEvent *pEvent);
  31. virtual void TouchMoved(CCTouch *pTouch,CCEvent *pEvent);
  32. virtual void TouchEnded(CCTouch *pTouch,CCEvent *pEvent);
  33. virtual void TouchCancelled(CCTouch *pTouch,CCEvent *pEvent);
  34.  
  35. private:
  36. //根据手势滑动的距离和方向滚动图层
  37. void adjustScrollView(float offset);
  38. ScrollView *m_pScrollView;
  39. CCPoint m_touchPoint;
  40. int m_nCurPage;
  41. };
  42.  
  43. #endif

2.TableView

  1. #ifndef __TABLEVIEWTESTSCENE_H__
  2. #define __TABLEVIEWTESTSCENE_H__
  3.  
  4. #include "cocos2d.h"
  5. #include "cocos-ext.h"
  6.  
  7. class ListViewLayer : public cocos2d::CCLayer,public cocos2d::extension::TableViewDataSource,public cocos2d::extension::TableViewDelegate
  8. {
  9. public:
  10. virtual bool init();
  11. virtual void scrollViewDidScroll(cocos2d::extension::ScrollView* view);
  12.  
  13. virtual void scrollViewDidZoom(cocos2d::extension::ScrollView* view);
  14.  
  15. //处理触摸事件
  16. virtual void tableCellTouched(cocos2d::extension::TableView* table,cocos2d::extension::TableViewCell* cell);
  17. //每一项的宽度和高度
  18. virtual cocos2d::CCSize cellSizeForTable(cocos2d::extension::TableView *table);
  19. //生成列表每一项的内容
  20. virtual cocos2d::extension::TableViewCell* tableCellAtIndex(cocos2d::extension::TableView *table,ssize_t idx);
  21. //一共多少项
  22. virtual ssize_t numberOfCellsInTableView(cocos2d::extension::TableView *table);
  23.  
  24. CREATE_FUNC(ListViewLayer);
  25. };
  26.  
  27. #endif

  1. #include "ListViewLayer.h"
  2.  
  3. USING_NS_CC;
  4. USING_NS_CC_EXT;
  5.  
  6.  
  7. bool ListViewLayer::init()
  8. {
  9. bool bRet = false;
  10. do
  11. {
  12. CC_BREAK_IF( !CCLayer::init() );
  13.  
  14. TableView* pTableView = TableView::create(this,CCSizeMake(960,640));
  15. pTableView->setDirection(ScrollView::Direction::HORIZONTAL);
  16. pTableView->setPosition(CCPointZero);
  17. pTableView->setDelegate(this);
  18. pTableView->setVerticalFillOrder(TableView::VerticalFillOrder::TOP_DOWN);
  19. this->addChild(pTableView);
  20. pTableView->reloadData();
  21.  
  22. bRet = true;
  23. }while(0);
  24.  
  25. return bRet;
  26. }
  27.  
  28.  
  29.  
  30. void ListViewLayer::tableCellTouched(TableView* table,TableViewCell* cell)
  31. {
  32. CCLog("cell touched at index: %i",cell->getIdx());
  33. }
  34.  
  35. CCSize ListViewLayer::cellSizeForTable(TableView *table)
  36. {
  37. return CCSizeMake(960,640);
  38. }
  39.  
  40. TableViewCell* ListViewLayer::tableCellAtIndex(TableView *table,ssize_t idx)
  41. {
  42. CCString *pString = CCString::createWithFormat("%d",idx);
  43. TableViewCell *pCell = table->dequeueCell();
  44. if (!pCell) {
  45. pCell = new TableViewCell();
  46. pCell->autorelease();
  47. CCSprite *pSprite = CCSprite::create("listitem.png");
  48. pSprite->setScaleY(CCDirector::sharedDirector()->getVisibleSize().height / pSprite->getContentSize().height);
  49. pSprite->setAnchorPoint(CCPointZero);
  50. pSprite->setPosition(CCPointZero);
  51. pCell->addChild(pSprite);
  52.  
  53. CCLabelTTF *pLabel = CCLabelTTF::create(pString->getCString(),"Arial",20.0);
  54. pLabel->setPosition(CCPointZero);
  55. pLabel->setAnchorPoint(CCPointZero);
  56. pLabel->setTag(123);
  57. pCell->addChild(pLabel);
  58. }
  59. else
  60. {
  61. CCLabelTTF *pLabel = (CCLabelTTF*)pCell->getChildByTag(123);
  62. pLabel->setString(pString->getCString());
  63. }
  64.  
  65.  
  66. return pCell;
  67. }
  68.  
  69. ssize_t ListViewLayer::numberOfCellsInTableView(TableView *table)
  70. {
  71. return 20;
  72. }
  73.  
  74.  
  75. void ListViewLayer::scrollViewDidScroll(ScrollView *view)
  76. {
  77. CCLog("scrollViewDidScroll: %i",view->getContentOffset());
  78. }
  79.  
  80. void ListViewLayer::scrollViewDidZoom(ScrollView *view)
  81. {
  82. }

猜你在找的Cocos2d-x相关文章