cocos2d-x摇杆(一)

前端之家收集整理的这篇文章主要介绍了cocos2d-x摇杆(一)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

  1.  
先看效果图:

具体实现:

Control.h

  1. #ifndef _CONTROL_H_
  2. #define _CONTROL_H_
  3. #include "cocos2d.h"
  4. USING_NS_CC;
  5. class Control : public cocos2d::CCLayer
  6. {
  7. public:
  8. virtual bool init();
  9. CREATE_FUNC(Control);
  10. virtual void onEnter();
  11. virtual void onExit();
  12. virtual bool ccTouchBegan(CCTouch* touch,CCEvent* event);
  13. virtual void ccTouchMoved(CCTouch* touch,CCEvent* event);
  14. virtual void ccTouchEnded(CCTouch* touch,CCEvent* event);
  15. private:
  16. CCSize visibleSize; //可视窗口大小
  17. CCSprite* control_bg;
  18. CCSprite* cen;
  19. void initData();
  20. bool isOnControl;
  21. CCPoint origin; //摇杆中心点
  22. float r_control;
  23. };
  24. #endif

Control.cpp

  1. #include"Control.h"
  2. USING_NS_CC;
  3. bool Control::init()
  4. {
  5. if (!CCLayer::init())
  6. {
  7. return false;
  8. }
  9. initData();
  10. return true;
  11. }
  12. void Control::initData()
  13. {
  14. origin = ccp(150,150); //摇杆原点
  15. control_bg = CCSprite::create("dpadUp.png");
  16. control_bg->setPosition(origin);
  17. control_bg->setScale(2);
  18. this->addChild(control_bg);
  19. cen = CCSprite::create("joystickUp.png");
  20. cen->setPosition(origin);
  21. this->addChild(cen);
  22. CCRect r = control_bg->boundingBox();
  23. r_control = (r.getMaxX()-r.getMinX())/2; //摇杆半径
  24. }
  25. void Control::onEnter()
  26. {
  27. CCLayer::onEnter();
  28. CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,false);
  29. }
  30. bool Control::ccTouchBegan(CCTouch* touch,CCEvent* event)
  31. {
  32. if (cen->boundingBox().containsPoint(touch->getLocation()))
  33. {
  34. isOnControl = true;
  35. cen->setScale(1.1);
  36. }
  37. return true;
  38. }
  39. void Control::ccTouchMoved(CCTouch* touch,CCEvent* event)
  40. {
  41. if (isOnControl)
  42. {
  43. CCPoint p_touch = touch->getLocation();
  44. float distance = sqrt((p_touch.x - origin.x)*(p_touch.x - origin.x)+(p_touch.y - origin.y)*(p_touch.y - origin.y)); //触摸点和摇杆起点的距离
  45. if (distance <= r_control)
  46. {
  47. cen->setPosition(touch->getLocation());
  48. cen->setScale(1.1);
  49. }
  50. else
  51. {
  52. float x = r_control/distance * (p_touch.x - origin.x)+origin.x;
  53. float y = r_control/distance * (p_touch.y - origin.y)+origin.y;
  54. cen->setPosition(ccp(x,y));
  55. cen->setScale(1.1);
  56. }
  57. }
  58. else
  59. {
  60. //do nothing
  61. }
  62. }
  63. void Control::ccTouchEnded(CCTouch* touch,CCEvent* event)
  64. {
  65. isOnControl = false;
  66. cen->setPosition(origin);
  67. cen->setScale(1);
  68. }
  69. void Control::onExit()
  70. {
  71. CCDirector::sharedDirector()->getTouchDispatcher()->removeAllDelegates();
  72. CCLayer::onExit();
  73. }

在场景中使用:

  1. control = Control::create();
  2. this->addChild(control,1);


代码和素材下载地址:

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