代码改变世界

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 }