0

在这里有一个问题。我在我的 (id)init 函数中创建了几个精灵(带有标签),然后只是试图检测哪个精灵被触摸了?我的 init 函数的代码片段粘贴在下面。

    [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"blue_sheet.plist"];
    //create a sprite batch node
    CCSpriteBatchNode *TrainerSprites = [CCSpriteBatchNode batchNodeWithFile:@"blue_sheet.png"];
    [self addChild:TrainerSprites z:1];

    //create a sprite from that node
    CCSprite *Horse = [CCSprite spriteWithSpriteFrameName:@"horse_blue.png"];
    [TrainerSprites addChild:Horse z:1 tag:1];
    //Horse.position = ccp(winSize.width/5, winSize.height/2);
    [Horse setScaleX: 138.5/Horse.contentSize.width];
    [Horse setScaleY: 80/Horse.contentSize.height];

    //create a sprite from that node
    CCSprite *Cow = [CCSprite spriteWithSpriteFrameName:@"cow_blue.png"];
    [TrainerSprites addChild:Cow z:1 tag:2];
    //Cow.position = ccp(winSize.width/2, winSize.height/2);
    [Cow setScaleX: 126/Cow.contentSize.width];
    [Cow setScaleY: 100/Cow.contentSize.height];

    Horse.position = ccp(4*winSize.width/5, winSize.height/2);
    Cow.position = ccp(winSize.width/5, winSize.height/2);

    CGRect pos1 = CGRectMake(Cow.position.x, Cow.position.y, 200, 100);
    CGRect pos2 = CGRectMake(Horse.position.x, Horse.position.y, 200, 100);

    self.touchEnabled = YES;

一切看起来都很好......并且精灵出现在它们应该出现的位置。当我触摸屏幕上的任何位置时,我的 ccTouchBegan 函数就会触发。没有看到 CGRect 发生任何事情,我想我需要确定分配的标签触发了哪一个。是的,确实,我知道我缺少代码,我只是无法在任何地方找到好的可靠文档如何执行这个看似基本的 ios 功能。我假设“精灵触摸检测”代码应该驻留在 ccTouchBegan 函数中?真诚感谢任何帮助或指导。:)

4

2 回答 2

0

要检测精灵触摸,您可以使用它

CCSprite *Cow在您的 .h 部分中声明

并在 .m 部分
在 init 方法中使用它

//create a sprite from that node
    Cow = [CCSprite spriteWithSpriteFrameName:@"cow_blue.png"];
    [TrainerSprites addChild:Cow z:1 tag:2];
    //Cow.position = ccp(winSize.width/2, winSize.height/2);
    [Cow setScaleX: 126/Cow.contentSize.width];
    [Cow setScaleY: 100/Cow.contentSize.height];

在接触开始方法

 -(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {    
        UITouch * touch =[touches anyObject];
        CGPoint location=[touch locationInView:[touch view]];
        location =[[CCDirector sharedDirector] convertToGL:location];
        if (CGRectContainsPoint( [Cow boundingBox], location)) {

               /* CCScene *scene = [CCScene node];
                [scene addChild:[ClassicScene node]];
                [[CCDirector sharedDirector] replaceScene:scene];*/
            }

    }
于 2013-09-23T09:04:15.077 回答
0

另一种方法可能是继承 CCSprite 并实现TargetedTouchDelegate

就像是:

@interface AnimalSprite:CCSprite<CCTargetedTouchDelegate>

这种方法的优点是您不必在添加精灵的图层中进行大量“如果”检查。该链接提供了您必须实现的方法以实现协议以及您可以在哪里以及如何注册触摸调度程序。

于 2013-09-23T18:09:37.423 回答