Я пытаюсь создать расширенный класс CCSprite, который может обнаруживать касания.Я провел некоторое исследование и обнаружил пример на http://anny.fm/c/iphone/cocos2d/TouchableSprite/, который был создан Энни в этой ветке форума http://www.cocos2d -iphone.org / forum / topic / 3196 (последнее сообщение).
Используя это, я настроил свой класс следующим образом:
Заголовок
#import <Foundation/Foundation.h>
#import "cocos2d.h"
@interface PianoKey : CCSprite <CCTargetedTouchDelegate> {
}
-(BOOL) tsTouchBegan: (UITouch*)touch withEvent: (UIEvent*)event;
-(void) tsTouchMoved: (UITouch*)touch withEvent: (UIEvent*)event;
-(void) tsTouchEnded: (UITouch*)touch withEvent: (UIEvent*)event;
-(void) tsTouchCancelled: (UITouch*)touch withEvent: (UIEvent*)event;
@end
и реализация ...
@implementation PianoKey
-(id)initWithKey:(int)key {
if((self = [super initWithFile:[NSString stringWithFormat:@"key_%i.png",key]])) {
}
return self;
}
-(BOOL) tsTouchBegan:(UITouch*)touch withEvent: (UIEvent*)event {
NSLog( @"tsTouchBegan");
return YES;
}
-(void) tsTouchMoved:(UITouch*)touch withEvent: (UIEvent*)event {
NSLog( @"tsTouchMoved");
}
-(void) tsTouchEnded:(UITouch*)touch withEvent: (UIEvent*)event {
NSLog( @"tsTouchEnded");
}
-(void) tsTouchCancelled:(UITouch*)touch withEvent: (UIEvent*)event {
NSLog( @"tsTouchCancelled");
}
//
// Utilities. Don't override these unless you really need to.
//
-(CGRect) rect {
CGSize s = [self.texture contentSize];
return CGRectMake(-s.width / 2, -s.height / 2, s.width, s.height);
}
-(BOOL) didTouch: (UITouch*)touch {
return CGRectContainsPoint( [self rect], [self convertTouchToNodeSpaceAR: touch] );
}
//
// The actual touch listener functions. Don't override these either.
//
-(BOOL) ccTouchBegan:(UITouch*)touch withEvent: (UIEvent*)event {
NSLog(@"attempting touch.");
if([self didTouch: touch]) {
return [self tsTouchBegan:touch withEvent: event];
}
return NO;
}
-(void) ccTouchMoved: (UITouch*)touch withEvent: (UIEvent*)event { if([self didTouch: touch]) [self tsTouchMoved: touch withEvent: event]; }
-(void) ccTouchEnded: (UITouch*)touch withEvent: (UIEvent*)event { if([self didTouch: touch]) [self tsTouchEnded: touch withEvent: event]; }
-(void) ccTouchCancelled: (UITouch*)touch withEvent: (UIEvent*)event { if([self didTouch: touch]) [self tsTouchCancelled: touch withEvent: event]; }
@end
Я понимаю методы, описанные вышеНапример, обнаружение, было ли касание в пределах спрайта, однако я застрял в том, почему я не получаю никакого ответа, когда нажимаю клавишу.Я новичок в реализации CCTargetdTouchDelegate, поэтому я предполагаю, что это может быть как-то связано с этим ...