首页 > 其他 > 详细

Cocos2d-x 3.0 中使用单点触摸

时间:2015-06-10 23:46:24      阅读:254      评论:0      收藏:0      [点我收藏+]

Cocos2d-x 3.0 中使用单点触摸

尊重原创:http://cn.cocos2d-x.org/tutorial/show?id=2712

在游戏中,经常会用到触摸,大部分游戏也是通过触摸控制游戏角色运动的,在Cocos2d-x 3.0中使用了新的触摸机制,Cocos2d-x 3.0中摒弃了Cocos2d-x 2.0中将要触发的事件交给代理(delegate)处理,再通过实现代理里面的onTouchBegan等方法接收事件,最后完成事件的响应,在Cocos2d-x 3.0中只需通过创建一个事件监听器-用来实现各种触发后的逻辑,然后添加到事件分发器_eventDispatcher,所有事件监听器有这个分发器统一管理,即可完成事件响应。

上面的话可能过于抽象,下面通过一个简单的例子来测试Cocos2d-x 3.0中触摸

首先创建一个TouchScene类,并且在TouchScene.h中添加下面的代码

#ifndef __TouchScene__  
#define __TouchScene__     
#include "cocos2d.h"  
USING_NS_CC;     
class TouchScene : public Layer 
{  
public:
      static Scene* createScene();
      virtual bool init();
      CREATE_FUNC(TouchScene);

      //开始触摸
    bool onTouchBegan(Touch* touch, Event  *event);

      //滑动
    void onTouchMoved(Touch* touch, Event  *event);

      //结束触摸
    void onTouchEnded(Touch* touch, Event  *event);

      //取消触摸
    void onTouchCancelled(Touch* touch, Event* event);
};

#endif

在TouchScene.cpp中添加下面的代码

#include "Touch.h" 

Scene* TouchScene::createScene() 
{
    auto scene = Scene::create(); 
    auto layer = TouchScene::create();  
    scene->addChild(layer);
    return scene; 
}

bool TouchScene::init()
{
     if(!Layer::init())
     {
        return false;
     }  
 
    //创建一个事件监听器,OneByOne为单点触摸      
    auto listener = EventListenerTouchOneByOne::create();  

    //事件回调函数      
    listener->onTouchBegan = CC_CALLBACK_2(TouchScene::onTouchBegan, this);      
    listener->onTouchMoved = CC_CALLBACK_2(TouchScene::onTouchMoved, this);      
    listener->onTouchEnded = CC_CALLBACK_2(TouchScene::onTouchEnded, this);  

     //添加监听器      
     _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);

    return true;  
}  

//开始触摸  
bool TouchScene::onTouchBegan(Touch* touch, Event  *event)
{
      log("touch began !");
      return true;  
}

//滑动  
void TouchScene::onTouchMoved(Touch* touch, Event  *event)
{
      log("touch moved !");
}

//结束触摸
void TouchScene::onTouchEnded(Touch* touch, Event  *event)
{
      log("touch ended !");
}        

//取消触摸
void TouchScene::onTouchCancelled(Touch* touch, Event* event)
{
      onTouchEnded(touch, event);
}

测试程序,程序的测试结果如下:

当触摸屏幕时会打印touch began !

当触摸结束后会打印touch ended !

当在屏幕上滑动时会打印touch moved !

技术分享

 

Cocos2d-x 3.0 中使用单点触摸

原文:http://www.cnblogs.com/LeavesSmallAnt/p/4567381.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!