Как предотвратить обнаружение спрайтов в определенной области (которая также является спрайтом) в Cocos2D? - PullRequest
1 голос
/ 31 октября 2011

Я хочу предотвратить обнаружение спрайтов в определенной области в Cocos2D. В моей игре спрайты нерестятся снизу, что обнаруживается при прикосновении. Я добавил newArea (область), где спрайты появляются из-под newArea (так как ориентация z равна 1 для newArea). Сейчас в этой конкретной области я не хочу, чтобы касание было обнаружено (так как я должен добавить дополнительные функции здесь). Как я могу это сделать? Ниже приведен код, который я использую.

    CCSprite *background = [CCSprite spriteWithFile:@"bgmain.png"];
           background.position = ccp(winSize.width/2, winSize.height/1.7);
           [self addChild:background];

    CCSprite *newArea = [CCSprite spriteWithFile:@"newImage.png"];
          newArea.position = ccp(winSize.width/2, winSize.height/17);
          [self addChild:newArea z:1];

// Для обнаружения касания

- (void)selectSpriteForTouch:(CGPoint)touchLocation 
{

    for (CCSprite *sprite in targets)
    {

        if (CGRectContainsPoint([sprite boundingBox], touchLocation))

        {
            switch (sprite.tag) {
                case 1:
                    [[SimpleAudioEngine sharedEngine] playEffect:@"button1.wav"];
                    [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
                    break;
                  case 2:  
                    [[SimpleAudioEngine sharedEngine] playEffect:@"button2.wav"];
                    [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
                    break;
                case 3:
                    [[SimpleAudioEngine sharedEngine] playEffect:@"button3.wav"];
                    [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
                    break;
                case 4:
                    [[SimpleAudioEngine sharedEngine] playEffect:@"button4.wav"];
                    [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
                    break;
                case 5:
                    [[SimpleAudioEngine sharedEngine] playEffect:@"button5.wav"];
                    [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
                    break;
                case 6:
                    [[SimpleAudioEngine sharedEngine] playEffect:@"button6.wav"];
                    [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
                    break;
                case 7:
                    [[SimpleAudioEngine sharedEngine] playEffect:@"button7.wav"];
                    [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
                    break;
                case 8:
                    [[SimpleAudioEngine sharedEngine] playEffect:@"button8.wav"];
                    [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
                    break;
                case 9:
                    [[SimpleAudioEngine sharedEngine] playEffect:@"button9.wav"];
                    [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
                    break;
                case 10:
                    [[SimpleAudioEngine sharedEngine] playEffect:@"button10.wav"];
                    [[SimpleAudioEngine sharedEngine] setEffectsVolume:4.0f];
                    break;
                default:
                    break;
            }

            NSLog(@"target.tag %d",sprite.tag);

            [targets removeObject:sprite];

            [self balloonBlastAnimation:sprite];

            [sprite.parent removeChild:sprite cleanup:YES];

            break;

        }
    }
}

-(void) removeSprite:(CCSprite*) s
{
    s.visible = FALSE;
    [self removeChild:s cleanup:YES];
}

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    for( UITouch *touch in touches ) 
    {
        CGPoint location = [touch locationInView: [touch view]];
    location = [[CCDirector sharedDirector] convertToGL: location];
        [self selectSpriteForTouch:location];   
        NSLog(@"touch was detected");
    }   
}

Ответы [ 2 ]

1 голос
/ 31 октября 2011
CGRect bbox = CGRectMake(0, 0, 
                        newArea.contentSize_.width, newArea.contentSize_.height);
CGPoint locationInNodeSpace = [self convertToNodeSpace:touchLocation];
BOOL touchOnNewArea = CGRectContainsPoint(bbox, locationInNodeSpace);

Я думаю, что вы можете продолжать отсюда самостоятельно.;)

1 голос
/ 31 октября 2011

На touchShegan, проверьте, находится ли касание в прямоугольнике, который вы хотите игнорировать, если это так, просто верните.

...