Cocos2d-x学习(三):触屏事件(单点触屏)

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 23:14 点击:

cocos2d-x中的触屏事件分为多点触屏和单点触屏,而多点触屏用到的地方并不是很多,所以先主要记录一下单点触屏的用法和基本原理。

 


一般经常用到的触屏的情况有两种:一种是Layer统一接收触屏消息,然后由程序根据需要分发给不同位置的精灵;另一种情况是自定义一个可以接收触屏消息的Sprite,比如类似于Button功能的Sprite,这就需要在定义Sprite的时候就要定义好触屏所触发的操作!

 


下面就两种情况分别记录一下基本用法:

1.Layer接收触屏消息
用法很简单,只需要覆写父类的4个方法(可以根据需要,但是ccTouchBegan()是必须要覆写的,并且其返回值对触屏事件的传递有影响,后面会总结),并在init()方法中将其添加到CCTouchDispacher中,代码如下

[cpp]
<span style="font-size:12px;">class TouchableLayer: public CCLayer  

public: 
     
    virtual bool init(); 
     
    LAYER_NODE_FUNC(TouchableLayer); 
     
    virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);</span> 
<span style="font-size:12px;">class TouchableLayer: public CCLayer
{
public:
   
    virtual bool init();
   
    LAYER_NODE_FUNC(TouchableLayer);
   
    virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);</span>[cpp] view plaincopyprint?<span style="font-size:12px;"> 
    virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent); 
    virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent); 
    virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent); 
};</span> 
<span style="font-size:12px;">
    virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);
    virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);
    virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);
};</span>在Layer的init()中添加如下代码,这个Layer就可以接收到触屏消息了

[cpp]
<span style="font-size:12px;">CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, 0, true);</span> 
<span style="font-size:12px;">CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, 0, true);</span>

如果想通过这种方式判断具体触摸的Sprite或者区域等信息,就需要自己写判断和分发消息的代码了!

2.自定义可以接收触屏消息的Sprite
这种稍微复杂一些,但是还是比较好理解的,首先要先继承CCSprite或者其父类,以满足精灵形状,位置等信息的要求,另外还需要继承触屏事件委托CCTargetedTouchDelegate,CCTargetedTouchDelegate中定义了接收触屏信息的回调虚函数,而这些虚函数,正是我们需要覆写的部分,代码如下

[cpp]
<span style="font-size:12px;">class TouchableSprite: public CCSprite, public CCTargetedTouchDelegate 

     
public: 
    TouchableSprite(); 
    virtual ~TouchableSprite(); 
     
    static TouchableSprite *touchSpriteWithFile(const char *file); 
     
    bool initWithFile(const char *file); 
     
    virtual void onEnter(); 
    virtual void onExit(); 
     
    CCRect rect(); 
    bool containsTouchLocation(CCTouch *touch); 
     
    virtual bool ccTouchBegan(CCTouch *touch, CCEvent *event); 
    virtual void ccTouchMoved(CCTouch *touch, C

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • cocos2d-x学习笔记(19)--label 、label atlas
    • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
    • Cocos2d-x学习(一):HelloWorld
    • cocos2dx在xcode下开发,编译到android上(2)
    • cocos2d 设置屏幕默认方向
    • cocos2d-x学习笔记(22)--地图的使用2(TMX) --Z-Order、AnchorPoi
    • Cocos2d-x 2.0 之 Actions “三板斧” 之一
    • cocos2d-x学习笔记(18)--游戏打包(windows平台)
    • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1