cocos2d ccTouchBegan不被调用

参考自: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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值