Как выбрать все цели с помощью прямоугольников в cocos2d - PullRequest
0 голосов
/ 26 января 2012

Я хочу выбрать мои цели, используя прямоугольные штрихи

создаю мои невыбранные точки, кодируя их так: -

    targets1 = [[NSMutableArray alloc] init];

         for(int i=0;i<3;i++)
            {
                for (int y=0; y<3; y++) {
                    CCTexture2D *texture = 
                    [[CCTextureCache sharedTextureCache] addImage:@"UnselectedDot.png"];
                        block = [CCSprite spriteWithTexture:texture rect:CGRectMake(0,0,82,82)];
                    CGFloat xoffset = ((block.contentSize.width)*10) + (((block.contentSize.height)-175)*y);
                    block.position = ccp( (i*82)+80,xoffset);
                   [bg1 addChild:block];

                    [targets1 addObject:block];
}
}

ниже - мой пример вывода.

теперь мне нужно выбрать все точки методом касания. я написал кодировку так: -

- (void)update:(ccTime)dt {
 //   NSLog(@"%@",targets1);
   for (CCSprite *sprite in targets1) {
       CGRect dotrect = CGRectMake(sprite.position.x, 
                             sprite.position.y-95, 
                             sprite.contentSize.width, 
                             sprite.contentSize.height);
       CGFloat x = location.x;
       CGFloat y = location.y;
       CGFloat width =  (location1.x - location.x);
       CGFloat height = -(location1.y - location.y);
       CGRect touchrect = CGRectMake (x, y, width,height); 
       NSLog(@"dotrect = %f,%f,%f,%f",dotrect.origin.x,dotrect.origin.y,dotrect.size.width,dotrect.size.height );                        
       NSLog(@"touch rect = %f,%f,%f,%f,%f,%f",touchrect.origin.x,touchrect.origin.y,touchrect.size.width,touchrect.size.height,location1.x,location1.y);
       if( CGRectContainsRect(dotrect, touchrect))
       {     //collision detection
            NSLog(@"am touched dot ");
       }
     }
}

- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {    
    location = [touch locationInView:[touch view]]; 
    location = [[CCDirector sharedDirector] convertToGL:location];
    NSLog(@"am touched began");
    return YES;

}

- (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event {
    location1 = [touch locationInView:[touch view]]; 
    location1 = [[CCDirector sharedDirector] convertToGL:location1];
   location1 = [self convertToNodeSpace:location1]; 
}

в соответствии с приведенным выше кодированием моя концепция такова: - используя прикосновения начались, и прикосновения закончились, я делаю прямоугольник здесь ... внутри этих штрихов мой невыбранный точечный прямоугольник пришел означает обнаружение столкновения ... тогда я могу делать там свои вещи но не все сталкиваются.

Я не получаю, где делаю ошибку.

Редактировать: 1

теперь я понял, почему coillision не работает ... на самом деле внутри меня происходит соприкосновение прямоугольника с несколькими прямоугольниками ... так что только ... здесь, я использую rectcontainsrect ... это проблема ... любой другой метод для создания прямоугольника с несколькими прямоугольниками для обнаружения столкновений ..

1 Ответ

0 голосов
/ 08 февраля 2012

Попробуйте использовать:

CGPoint location=[touch locationInView:[touch view]];
    location = [self convertTouchToNodeSpace:touch];
CGRectContainsPoint([dot boundingBox], location);

внутри методов CCTouch .. (по вашему желанию в зависимости от того, что вы хотите сделать).

...