Cocos2d中,我们让CCSprite也可以接受触摸。

 

    cocos2d中,layer的主要任务就是接受用户的触摸,在看本文之前,读者最好了解ios与用户交互的方式,最好也知道cocos2d中

 

是怎么相应用户的触摸到各个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是注销的意思。

 

你可能感兴趣的:(ios,任务,interface,layer,2010)