• cocos2d-x C++ (利用定时器自定义屏幕双击事件函数)


     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 }

     

     

  • 相关阅读:
    K好数
    蓝桥杯 安慰奶牛
    蓝桥杯 节点选择
    模拟链表
    10588
    八数码的 八种境界
    HIT 2051
    概率DP
    数组越界溢出
    FATFS在SD卡里,写入多行数据出的问题
  • 原文地址:https://www.cnblogs.com/luorende/p/6649404.html
Copyright © 2020-2023  润新知