Cocos2d iphone 在cocos2d中检测精灵的触摸

Cocos2d iphone 在cocos2d中检测精灵的触摸,cocos2d-iphone,touch,ccsprite,Cocos2d Iphone,Touch,Ccsprite,我将CCSprite子类化以检测对其自身的触摸 触摸开始在触摸时触发,但日志显示相同的精灵一直在处理触摸,即使我每次触摸不同的精灵。 (所有触摸屏的指针地址都相同。) 进一步的日志显示,这是我添加到世界层的最后一个精灵 为什么我添加的最后一个精灵会自己对触摸事件做出反应 我使用了CCSpriteBatchNode,这与问题有关吗 或者是因为cocos2d没有执行命中测试来找到传递触摸事件的正确对象?我已经看过了cocos2d-x源代码 在将触摸事件发送给触摸代理之前,它不会点击测试。 因此,您必

我将CCSprite子类化以检测对其自身的触摸

触摸开始在触摸时触发,但日志显示相同的精灵一直在处理触摸,即使我每次触摸不同的精灵。
(所有触摸屏的指针地址都相同。)

进一步的日志显示,这是我添加到世界层的最后一个精灵

为什么我添加的最后一个精灵会自己对触摸事件做出反应

我使用了CCSpriteBatchNode,这与问题有关吗


或者是因为cocos2d没有执行命中测试来找到传递触摸事件的正确对象?

我已经看过了cocos2d-x源代码

在将触摸事件发送给触摸代理之前,它不会点击测试。

因此,您必须在TouchStart中自己执行命中测试。(至少对于TargetedElegate类型)

您需要检查触摸的位置是否在精灵的边界内

一些奇怪的伪代码

function touchBegan(UITouch touch, etc)
    CGPoint pos = get location of touch;
    if (CGRectContainsPoint(sprite.boundingBox, pos)) //I think that is the method you need. It's something like that.
        NSLog(@"Sprite was touched!");
        return YES;

覆盖触摸代理:

- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
    BOOL shouldClaimTouch = NO;

    CGRect myRect = CGRectMake(0, 0, self.contentSize.width, self.contentSize.height);

    CGPoint touchLocation = [self convertTouchToNodeSpace:touch];
    CGPoint absoluteTouch = CGPointMake(fabsf(touchLocation.x), fabsf(touchLocation.y));

    BOOL layerContainsPoint = CGRectContainsPoint(myRect, absoluteTouch);
    if( layerContainsPoint )
    {
        shouldClaimTouch = YES;
        NSLog(@"Sprite was touched!");
        [self fireEvent];
    }

    return shouldClaimTouch;
}

显示您的代码,以便有人可以帮助您这已被标记为正确答案,但代码不清楚。UITouch图幅信息和精灵边界框信息不兼容。