cocos2d ccTouchBegan不被调用

cocos2d ccTouchBegan不被调用参考自 http blog sina com cn s blog 61e26bcb0100 htmlCCLayer 里面的 ccTouchBegan 和 ccTouchesBeg 到底调用哪个 默认调用的是 ccTouchesBeg 方法 添加了如下代码的话 2012 08 30 12 56 启用 ccTouchEnded

参考自:http://blog.sina.com.cn/s/blog_61e26bcb0100xwqe.html

CCLayer 里面的 ccTouchBegan 和 ccTouchesBegan 到底调用哪个?

默认调用的是 ccTouchesBegan 方法~

添加了如下代码的话

/ * 2012。08。30。12。56~ * 启用 ccTouchEnded,禁用默认的 ccTouchesEnded~ */ -(void) registerWithTouchDispatcher { [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:true]; }

就会调用 ccTouchBegan 方法~

而且,ccTouchBegan 里面返回 NO,触摸事件就不会继续往下传递

为什么呢?

下面是我在 CCTouchHandler.m 里面扒出来的两块儿代码:

-(id) initWithDelegate:(id)del priority:(int)pri { if( (self=[super initWithDelegate:del priority:pri]) ) { if( [del respondsToSelector:@selector(ccTouchesBegan:withEvent:)] ) enabledSelectors_ |= kCCTouchSelectorBeganBit; if( [del respondsToSelector:@selector(ccTouchesMoved:withEvent:)] ) enabledSelectors_ |= kCCTouchSelectorMovedBit; if( [del respondsToSelector:@selector(ccTouchesEnded:withEvent:)] ) enabledSelectors_ |= kCCTouchSelectorEndedBit; if( [del respondsToSelector:@selector(ccTouchesCancelled:withEvent:)] ) enabledSelectors_ |= kCCTouchSelectorCancelledBit; } return self; } 

- (id)initWithDelegate:(id)aDelegate priority:(int)aPriority swallowsTouches:(BOOL)swallow { if ((self = [super initWithDelegate:aDelegate priority:aPriority])) { claimedTouches = [[NSMutableSet alloc] initWithCapacity:2]; swallowsTouches = swallow; if( [aDelegate respondsToSelector:@selector(ccTouchBegan:withEvent:)] ) enabledSelectors_ |= kCCTouchSelectorBeganBit; if( [aDelegate respondsToSelector:@selector(ccTouchMoved:withEvent:)] ) enabledSelectors_ |= kCCTouchSelectorMovedBit; if( [aDelegate respondsToSelector:@selector(ccTouchEnded:withEvent:)] ) enabledSelectors_ |= kCCTouchSelectorEndedBit; if( [aDelegate respondsToSelector:@selector(ccTouchCancelled:withEvent:)] ) enabledSelectors_ |= kCCTouchSelectorCancelledBit; } return self; }

观察后发现,其实就是做一些配置,然后就会注册各自的一批关于触摸的方法~
最后,使用的是默认的配置调用 ccTouchesBegan 等方法的话,

可以采用如下写法的:

UITouch* touch = [touches anyObject];

不一定非要快速遍历一趟的

for(UITouch* touch in touches) { CGPoint location = [touch locationInView:[touch view]]; location = [[CCDirector sharedDirector] convertToGL:location]; }

(如果不在 RootViewController.m 中添加开启多点触控特性的代码的话,touches 里面是不会有多个触摸点对象的)~







转载于:https://www.cnblogs.com/yang3wei/archive/2012/08/30/2739369.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178045.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午6:09
下一篇 2026年3月26日 下午6:09


相关推荐

  • JVM内存结构图解

    JVM内存结构图解一 真实系统中的概念  JVM(JavaVirtualMachine),顾名思义是对真实计算机系统的模拟,正因如此才能屏蔽物理机器的变化,从而实现“一次编译,到处运行”。  相信很多Java程序员经常听到堆、栈等概念,也会进行设置调优以让Java应用能够更好地运行,但对于JVM与真实计算机系统之间的关系并没有特别清晰的认识。因此,这里先简单介绍下真实计算机系统中的一

    2022年6月4日
    50
  • Latex 左右引号

    Latex 左右引号参考:LaTeX技巧218:LaTeX如何正确输入引号:双引号“”单引号‘’Latex左右引号在latex中加引号时,使用""的输出为两个同向的引号;正确的做法为:“Firewall”2018.2…

    2022年6月25日
    42
  • 多线程的几种实现方式

    多线程的几种实现方式上篇文章总结了下关于线程池很干 很干的干货 这次想着顺便连其他实现多线程的三种方式也汇总下吧 java 多线程的几种实现方式 1 继承 Thread 类 重写 run 方法 2 实现 Runnable 接口 重写 run 方法 实现 Runnable 接口的实现类的实例对象作为 Thread 构造函数的 target3 通过 Callable 和 FutureTask 创建线程 4 通过线程池创建线程 上一篇已经讲过了

    2026年3月19日
    2
  • Manus、Genspark、Coze空间、Minimax横评,谁是最强Agent?

    Manus、Genspark、Coze空间、Minimax横评,谁是最强Agent?

    2026年3月15日
    2
  • html中table样式_html中table的用法

    html中table样式_html中table的用法转自:http://atgoingguoat.iteye.com/blog/2074431常用table样式,备自己常年复制用。 效果图   Java代码  “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml

    2026年1月31日
    5
  • C++11新特性之字节对齐、多参数模版、placement new

    1.内存对齐上面的代码演示了采用#pragmapack()方法实现内存对其。接下来介绍C++11中相关内存对其的方法。1.1alignasalignas指定内存对其大小,有时候我们希望不按

    2021年12月28日
    48

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号