`
fireDragonpzy
  • 浏览: 462266 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

cocos2d-x事件触发的优先级

阅读更多
本文为firedragonpzy原创,转载务必在明显处注明:
转载自【Softeware MyZone】原文链接: http://www.firedragonpzy.com.cn/index.php/archives/858


   刚刚开始学习coocs2d-x的时候,被这个事件的优先级整的可是够呛啊。关于事件,有CCStandradTouch,CCTargetedTouch。CCTouchDispatcher类分发S获取的触摸事件。它有两种分发方式,一种是CCStandardTouchDelegate,一种是CCTargetedTouchDelegate。和前面的事件一一对应,前者将所有的Touch信息直接传递给实现该协议的对象,而后者则要求实现该代理的类一次只能处理一个事件,并且吃掉该事件,不再传播,当然也可以设置传播。

关于CCStandardTouchDelegate,它可以处理多触点事件,而CCTargetedTouchDelegate也就是相应的单点事件喽。
使用单点事件,基本都会用到下面的代码:
void DialogLayer::onEnter()
{
	CCLayerColor::onEnter();
	CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this,0,true);
}
void DialogLayer::onExit()
{
	CCLayerColor::onExit();
	CCTouchDispatcher::sharedDispatcher()->removeDelegate(this);
}

最主要的就是CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this,0,true);中的第三个参数,若为true,则表明吞掉事件,若为false,不吞掉事件,个人感觉和目标事件是一样的,只不过是单点,而不是多点而已。写完这个,相应的肯定会使用到下面的代码:
bool DialogLayer::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
{
	return true;
}
void DialogLayer::ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent)
{

}

void DialogLayer::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent)
{

}

ccTouchBegan中的return true,表明拥有对象处理权,这个返回值是和CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this,0,true);的第三个参数息息相关的若为true,ccTouchBegan也为true,会吞掉事件,走接下来的move等。若ccTouchBegan为false,则不会吞掉事件,各个层被分发点击事件,但是不走move等方法。
不对啊 ,扯远了,本来是说优先级的。先说优先级:

拿精灵来举例子吧。精灵触摸事件的触发是根据添加的顺序依次触发的,后添加的精灵先捕获触摸事件,当然,这是没有设置事件优先级的情况下,若要是定义了事件的优先级,则先按照事件的优先级依次被触发,然后根据添加的顺序依次被触发,特别注意在使用CCMenu的时候,容易出现错误,之前我就是怎么点击也不触发事件,纠结了好久,希望看了本文的朋友们,不会出现此低级错了
乱啊 ,工作了一天在写,脑子有点钝了,见谅,呼呼……


详细请参考: 【Software MyZne】[url]http://www.firedragonpzy.com.cn/index.php/archives/858 [/url]
分享到:
评论
2 楼 fireDragonpzy 2012-08-09  
chenhong53 写道
你好,我想问一下,能不能给一组精灵数组中的精灵添加触屏优先级,让我们点击两个有部分重叠的精灵后获得我们想要点击的精灵呢?


你可以自定义不同的精灵类,设置不同的触屏优先级,添加到数组
1 楼 chenhong53 2012-08-09  
你好,我想问一下,能不能给一组精灵数组中的精灵添加触屏优先级,让我们点击两个有部分重叠的精灵后获得我们想要点击的精灵呢?

相关推荐

    Cocos2D-X开发学习笔记-按键事件使用示例

    在Cocos2D-X中处理按键事件是游戏交互的重要部分,它允许开发者响应用户的输入,实现游戏逻辑或者界面控制。这篇学习笔记将深入探讨如何在Cocos2D-X中实现按键事件的处理。 首先,Cocos2D-X使用了事件系统来处理...

    cocos2d-x-3.2文档

    首先,我们要了解Cocos2d-x中的事件分发系统。在3.0版本之后,事件处理不再直接在节点上进行,而是通过事件监听器(EventListener)和事件分发器(EventDispatcher)来完成。事件分发器负责接收和分发事件到相应的...

    cocos2d-x学习笔记\cocos2d-x学习笔记(17)--简单游戏实例1--双枪手

    cocos2d-x提供了一些工具和技巧来帮助开发者优化帧率,例如使用`drawOrder`属性调整绘制顺序,避免不必要的计算,以及使用`scheduleUpdateWithPriorityLua`方法来控制更新的优先级。 总结,通过这个双枪手游戏实例...

    cocos2d-x手势识别(单击、双击、各形状)

    1. CCEventListenerTouchOneByOne:这是cocos2d-x中处理单个触摸事件的基础类。通过继承并重写其`onTouchBegan`、`onTouchMoved`和`onTouchEnded`等方法,我们可以实现基本的手势识别。 2. CCTargetedTouchDelegate...

    cocos2d-x 触摸事件 讲解

    ### cocos2d-x 触摸事件讲解 在游戏开发领域,特别是移动平台上的游戏开发,交互体验至关重要。本文将深入探讨cocos2d-x框架下的触摸事件处理机制,旨在帮助开发者更好地理解和掌握如何通过cocos2d-x实现高质量的...

    cocos2d-x多线程

    4. **调度器(Scheduler)**:Cocos2d-x的调度器是一个线程安全的组件,它负责安排任务的执行,可以控制任务的优先级和执行间隔。开发者可以通过调度器定时执行任务,或者在特定的时间点触发事件,这在多线程环境中...

    Cocos2D-X2.2.3学习笔记7(事件队列之触屏事件

    Cocos2D-X允许你为事件监听器设置优先级,以决定哪个监听器先接收到事件。优先级越高,先被调用。通过`setPriority`方法可以设置监听器的优先级。 5. 多点触控 Cocos2D-X同时支持多点触控。每个触点都会生成一个...

    cocos2d-x学习笔记(13)--schedule .rar

    在cocos2d-x游戏开发框架中,"schedule"是一个至关重要的概念,它涉及到游戏循环、时间管理和事件调度。这份"Cocos2d-x学习笔记(13)--schedule .rar"很可能是深入讲解如何使用和理解cocos2d-x中的调度系统。让我们...

    cocos2d-x 计时器的使用示例

    在Cocos2d-x这个强大的2D游戏开发框架中,计时器(Scheduler)是一个至关重要的组件,它允许开发者在特定的时间间隔内执行指定的函数或任务。计时器的使用能够帮助游戏开发者精确控制游戏逻辑,比如动画帧率、定时...

    TouchSpriteDemo.zip

    本篇我们将深入探讨一个名为"TouchSpriteDemo"的示例,该示例展示了如何在cocos2d-x环境中实现对触碰事件的响应,让精灵(ccsprite)具备互动性。 首先,让我们理解一下cocos2d-x中的"ccsprite"。ccsprite是cocos2d...

    cocos2d锤子打和尚

    Cocos2d提供了事件系统,允许开发者监听和响应用户的触摸、按键等输入,比如当玩家点击屏幕时,触发锤子的投掷动作。 资源管理也是游戏开发的关键部分。Cocos2d支持图片、音频、字体等多种资源的加载和管理,确保...

    ios源码之整合cocos2d手势识别-GestureRecognizers.rar

    5. **注意事项**:在Cocos2D中使用手势识别器时,需要注意手势之间的冲突和优先级。可能需要设置手势的`requireGestureRecognizerToFail:`属性,以确保只有特定的组合手势才会被识别。 通过这个源码示例"Gesture...

    InspectorDebug.zip

    在游戏开发领域,Cocos Creator是一款广泛使用的2D游戏引擎,以其高效、易用和强大的功能深受开发者喜爱。本压缩包"InspectorDebug.zip"包含了使用Cocos Creator构建的游戏工程,其中涉及到的关键知识点包括游戏项目...

Global site tag (gtag.js) - Google Analytics