ccTouchesMoved добавляет объект в массив несколько раз, хотя оператор if должен избегать этого - PullRequest
0 голосов
/ 08 декабря 2011

Если вызывается функция ccTouchesMoved, спрайты, находящиеся в области движущегося пальца, должны быть добавлены в массив.Но только ОДИН РАЗ.Я получаю результат, что он добавляет спрайт несколько раз (потому что палец все еще на спрайте, когда он перемещается к внешней стороне спрайта).Поэтому я инкапсулировал его в оператор if, которого следует избегать.Но это не ... Что мне делать?

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

    CCSprite* realSprite = [self whichHexagonTouched:convertedLocation];

    NSNumber *hexTag = [NSNumber numberWithInt:realSprite.tag];

    // If the hexagon is not in the array and not nil, it should destroy it and add it to the array

    if(realSprite != nil && ![hexTags containsObject:hexTag]){
        [self destroyHexagon:realSprite];    
        [hexTags addObject:hexTag];

        NSLog(@"these are the hexTags %@", hexTags);
        } 


}

1 Ответ

0 голосов
/ 09 декабря 2011

Почему бы вам не использовать NSSet (или NSMutableSet) вместо этого?Если вы не хотите сохранить порядок, в котором спрайты добавляются в список, NSMutableSet лучше подходит для вашего случая.Вам даже не нужно проверять, были ли спрайты добавлены в список или нет, потому что это выполняется внутри NSMutableSet.Также оптимизирован вызов containsObject: для NSSet, поскольку он использует хеши объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...