cocos2d-x C++ (利用定时器自定义屏幕双击事件函数)
2017-04-01 02:15 罗任德 阅读(580) 评论(0) 编辑 收藏 举报1 //GameScene.h 2 3 4 5 #include "cocos2d.h" 6 7 8 9 USING_NS_CC; 10 11 12 13 class GameScene : public cocos2d::Layer 14 15 { 16 17 public: 18 19 static cocos2d::Scene* createScene(); 20 21 22 23 virtual bool init(); 24 25 26 27 void singleClickEvent(); 28 29 void doubleClickEvent(); 30 31 32 33 void funCallback(float dt); 34 35 36 37 virtual bool onTouchBegan(Touch *touch, Event *unused_event); 38 39 40 41 CREATE_FUNC(GameScene); 42 43 44 45 private: //注意不能用auto关键字 46 47 Size size; 48 49 Sprite *sprite; 50 51 bool isClicked; 52 53 }; 54 55
1 //GameScene.cpp 2 3 4 5 // Created by Jacedy on 16-8-11. 6 7 8 9 #include "GameScene.h" 10 11 12 13 USING_NS_CC; 14 15 16 17 cocos2d::Scene* GameScene::createScene() 18 19 { 20 21 auto scene = Scene::create(); //创建一个场景 22 23 auto layer = GameScene::create(); //创建一个图层 24 25 scene->addChild(layer); 26 27 return scene; 28 29 } 30 31 32 33 //初始化当前的图层 34 35 bool GameScene::init() 36 37 { 38 39 if(!Layer::init()) //初始化父类 40 41 return false; 42 43 44 45 //获取屏幕大小 46 47 size = Director::getInstance()->getVisibleSize(); 48 49 //auto size = Director::getInstance()->getWinSize(); 50 51 //添加一个图片精灵 52 53 sprite = Sprite::create("OnePiece_1.png"); 54 55 sprite->setPosition(Vec2(size.width/2, size.height/2)); 56 57 this->addChild(sprite); 58 59 60 61 isClicked = false; 62 63 64 65 //创建监听事件对象 66 67 auto listener = EventListenerTouchOneByOne::create(); 68 69 70 71 //定义监听事件的回调函数 72 73 listener->onTouchBegan = CC_CALLBACK_2(GameScene::onTouchBegan, this); 74 75 76 77 //在事件分发器中注册 78 79 _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this); 80 81 82 83 return true; 84 85 } 86 87 88 89 void GameScene::singleClickEvent() 90 91 { 92 93 log("Single click"); 94 95 } 96 97 98 99 void GameScene::doubleClickEvent() 100 101 { 102 103 log("Double click"); 104 105 } 106 107 108 109 void GameScene::funCallback(float dt) 110 111 { 112 113 if (isClicked) 114 115 { 116 117 isClicked = false; 118 119 singleClickEvent(); 120 121 } 122 123 } 124 125 126 127 bool GameScene::onTouchBegan(Touch *touch, Event *unused_event) 128 129 { 130 131 if (isClicked) 132 133 { 134 135 isClicked = false; 136 137 doubleClickEvent(); 138 139 } 140 141 else 142 143 { 144 145 isClicked = true; 146 147 //0.3秒内再次点击将再次调用onTouchBegan函数,0.3秒后再次点击将调用funCallback函数 148 149 scheduleOnce(schedule_selector(GameScene::funCallback), 0.3f); 150 151 } 152 153 154 return false; 155 156 }