CCTouchDispatcher,ccTouchBegan

1.在CCLayer中注册CCTouchDispatcher来让Layer处理Touch事件。

1).在init中self.isTouchEnabled=YES;

2).重写 CCLayer的 registerWithTouchDispatcher方法,代码如下:
 -(void) registerWithTouchDispatcher

{

CCTouchDispatcher* dispatch = [CCTouchDispatcher sharedDispatcher];
[dispatch addTargetedDelegate:self priority:INT32_MIN+1 swallowsTouches:YES];

}

查看CCLayer中对registerWithTouchDispatcher的相关调用,可以看到在CCLayer中的OnEnter中调用了registerWithTouchDispatcher,而在OnExit也实现了对self在 CCTouchDispatcher中的移除。

也可以直接只在init最后调用[[[CCDirector sharedDirector] touchDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];

2.ccTouchBegan
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
CGPoint touchLocation = [self convertTouchToNodeSpace:touch];
return YES;
}

ccTouchBegan返回YES,表示用户界面层处理了当前的触摸事件,此事件不应该再被其它拥有低优先级的目标触摸代理的层进行处理。

在ccTouchBegan中,调用CCNode的一个辅助函数convertTouchToNodeSpace,把touch坐标点从屏幕坐标系转换成了节点坐标系。
这个方法做了以下三件事:
- (CGPoint)convertTouchToNodeSpace:(UITouch *)touch
{
//1.计算touch视图(也就是屏幕)的touch点位置(使用locaitonInView方法)
CGPoint point = [touch locationInView: [touch view]];
//2.转换touch坐标点为OpenGL坐标点(使用convertToGL方法)
point = [[CCDirector sharedDirector] convertToGL: point];
//3.转换OpenGL坐标系为指定节点的坐标系(使用convertToNodeSpace方法)
//注意它convertToNodeSpace和convertTouchToNodeSpace名称的区别
point=[self convertToNodeSpace:point];
return point;
}


3.ccTouchMoved
//移动精灵
- (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event
{
//oldTouchLocation
CGPoint oldTouchLocation = [touch previousLocationInView:touch.view];
oldTouchLocation = [[CCDirector sharedDirector] convertToGL:oldTouchLocation];
oldTouchLocation = [self convertToNodeSpace:oldTouchLocation];

//new touchLocation
CGPoint touchLocation = [self convertTouchToNodeSpace:touch];


//计算点差
CGPoint offset = ccpSub(touchLocation, oldTouchLocation);

//移动精灵
sprite.position = ccpAdd(sprite.position, offset);
}

20.
标准触碰协议
目标触碰协议

只要保证只有一个层响应触摸,然后做selector事件分发。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值