Cocos2d中,我们让CCSprite也可以接受触摸。
2010-11-15 15:44
162 查看
cocos2d中,layer的主要任务就是接受用户的触摸,在看本文之前,读者最好了解ios与用户交互的方式,最好也知道cocos2d中
是怎么相应用户的触摸到各个layer的。
首先我们继承自标准CCSprite,并且遵循CCTargetedTouchDeleget或者CCStandadTouchDeleget
这样我们自己的CCSprite就可以接受触摸了。
rect这个函数,是我们讲sprite自己的坐标映射到自己的坐标系中,
containsTouchLocation:这个函数就看看我们的触摸点是否在sprite中。
CGPoint pooint = [self convertTouchToNodeSpaceAR:touch];
这个就是将相对于layer的touch转化为sprite,然后得出相对与sprite本身的坐标。
这样我就能根据触摸sprite的不同位置,对sprite进行不同的控制。
OnEnter是继承自CCSprite的函数,主要作用是把自己注册到相应链中去,
这样精灵级别就可以接受触摸了。
相反,OnExit是注销的意思。
是怎么相应用户的触摸到各个layer的。
首先我们继承自标准CCSprite,并且遵循CCTargetedTouchDeleget或者CCStandadTouchDeleget
// // TestSprite.h // touchTest // // Created by jeffrey on 10-11-12. // Copyright 2010 __MyCompanyName__. All rights reserved. // #import <Foundation/Foundation.h> #import "cocos2d.h" @interface TestSprite : CCSprite<CCTargetedTouchDelegate> { } @end
// // TestSprite.m // touchTest // // Created by jeffrey on 10-11-12. // Copyright 2010 __MyCompanyName__. All rights reserved. // #import "TestSprite.h" @implementation TestSprite - (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event { if ( ![self containsTouchLocation:touch] ) { return NO; } CGPoint pooint = [self convertTouchToNodeSpaceAR:touch]; return YES; } - (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event { CGPoint touchPoint = [touch locationInView:[touch view]]; touchPoint = [[CCDirector sharedDirector] convertToUI:CGPointMake(touchPoint.x, touchPoint.y)]; self.position = CGPointMake(touchPoint.x, touchPoint.y); } - (void) onEnter { [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES]; [super onEnter]; } - (void) onExit { [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES]; [super onExit]; } - (CGRect)rect { CGSize s = [self.texture contentSize]; return CGRectMake(-s.width / 2, -s.height / 2, s.width, s.height); } - (BOOL)containsTouchLocation:(UITouch *)touch { return CGRectContainsPoint(self.rect, [self convertTouchToNodeSpaceAR:touch]); } @end
这样我们自己的CCSprite就可以接受触摸了。
rect这个函数,是我们讲sprite自己的坐标映射到自己的坐标系中,
containsTouchLocation:这个函数就看看我们的触摸点是否在sprite中。
CGPoint pooint = [self convertTouchToNodeSpaceAR:touch];
这个就是将相对于layer的touch转化为sprite,然后得出相对与sprite本身的坐标。
这样我就能根据触摸sprite的不同位置,对sprite进行不同的控制。
OnEnter是继承自CCSprite的函数,主要作用是把自己注册到相应链中去,
这样精灵级别就可以接受触摸了。
相反,OnExit是注销的意思。
相关文章推荐
- Cocos2d中,我们让CCSprite也可以接受触摸。
- Cocos2d中,我们让CCSprite也可以接受触摸。
- Cocos2d-x ccSprite的触摸消息响应 - ccsx教程
- Cocos2d-x 单点触摸--让我们用手指动起来的精灵
- 【转载】Cocos2D里制作可以保持圆角的CCSprite的方法
- 机器人行走( * 某少年宫引进了一批机器人小车。可以接受预先输入的指令,按指令行动。小车的基本动作很简单,只有3种:左转(记为L),右转(记为R),向前走若干厘米(直接记数字)。 例如,我们)
- 【Cocos2d-x】可以显示在线图片的CCSprite
- cocos2d-x接受键盘事件,左右键, 多点触摸
- 命运无法改变,可以改变的是我们对命运的态度。 --- 掌握成功指标IQ/EQ/AQ的含义和作用
- System提供了一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制。 其函数原型是: public static void arraycopy(Object src, int
- 让覆盖在下面层的视图接受触摸事件
- linux-c 应用程序可以接受参数的模版
- cocos2d - CCSprite
- 我们用一个等臂天平来称物体的质量,如果我们要称的物体质量范围在1到40克(整数),请问我们最少需要几块砝码可以完成这项物体质量的称量?
- 动态规划之----我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
- CrossPHP--在我们用ajax,js取不到指定数据时,我们可以换一种方式
- cocos2d-x (四):触摸事件处理机制
- 在Maven中当包的依赖发生冲突的时候,我们可以通过exclusion来进行排除依赖
- 盲人可以踢足球,我们还惧怕什么不能做呢!
- cocos2d-x3.x屏蔽下层触摸(制作透明图层暂停界面)