2

ユーザーがそれに触れたかどうかを検出してNSLOGを投稿しようとしているこのスプライトがあります。stackoverflow でのスプライト タッチの検出に関する cocos2d の投稿をいくつか読みましたが、少し混乱してよくわかりません。下にスプライトを投稿します。

chew = [CCSprite spriteWithFile:@"chew.png" rect:CGRectMake(0, 0, 152, 152)];
chew.position = ccp(100, 300);
[self addChild:chew];

理解した

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

    if (CGRectContainsPoint( [ chew   boundingBox], location)) 
    {
        NSLog(@"touched");
    }
}
4

3 に答える 3

2

これを試して

- (BOOL)containsTouchLocation:(UITouch *)touch
{
    if (![self visible]) return NO;

    Boolean isTouch = CGRectContainsPoint(self.rect, [self convertTouchToNodeSpaceAR:touch]);
    return isTouch;
}

- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
    if ([self containsTouchLocation:touch] ) 
    {                      
        NSLog(@"Touch find");
        return YES;
    }
    else  
    {
        return NO;
    }
}

もちろん、init では、self.isTouchEnabled = YES; を設定する必要があります。

于 2013-05-23T05:58:42.433 に答える