Cocos2d iphone Cocos2d中的可触摸精灵

Cocos2d iphone Cocos2d中的可触摸精灵,cocos2d-iphone,touch,Cocos2d Iphone,Touch,我正在尝试创建一个扩展的CCSprite类,它可以检测触摸。我做了一些研究,发现了一个由Anny在这个论坛帖子(最后一篇帖子)中创建的例子 使用此选项,我将我的类设置为: 标题 #import <Foundation/Foundation.h> #import "cocos2d.h" @interface PianoKey : CCSprite <CCTargetedTouchDelegate> { } -(BOOL) tsTouchBegan: (UITo

我正在尝试创建一个扩展的CCSprite类,它可以检测触摸。我做了一些研究,发现了一个由Anny在这个论坛帖子(最后一篇帖子)中创建的例子

使用此选项,我将我的类设置为:

标题

#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

我理解上面的方法,比如检测触摸是否在精灵的范围内,但是我仍然无法理解为什么我在点击按键时没有得到任何响应。我对实现CCTargetdTouchDelegate还不熟悉,所以我认为这可能与此有关……

您不需要目标触摸代理,它只是将NSSet触摸拆分为单个ccTouchXXX消息。您的实现只是缺少CCTargetedTouchHandler的注册和注销。这通常在OneNet中完成,因此它适用于任何节点类型,而不仅仅是CCLayer:

-(void) onEnter
{
    [super onEnter];
    [[TouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:INT_MIN+1 swallowsTouches:YES];
}

-(void) dealloc
{
    [[TouchDispatcher sharedDispatcher] removeDelegate:self];
    [super dealloc];
}
顺便说一句,已经有一个扩展的CCNode类,可以通过此测试测试触摸是否在节点(精灵、标签等)上:

[node containsTouch:uiTouch];

只是说你不必做这些工作

谢谢你,你在哪里就在哪里!嗯,一行。。我得结帐离开。
[node containsTouch:uiTouch];