2013-04-22 2 views
-1

Я создаю приложение Cocos2D, которое будет иметь между 4 - 12 спрайтами, которые пользователь может взаимодействовать с/move (спрайты 1 - 4 на рис.). Будет равное количество целевых спрайтов, чтобы пользователь мог перетащить другие спрайты (Цели 1 - 4 на рис.). Я думал о добавлении тегов ко всем спрайтам, чтобы различать их. У меня возникают трудности с определением правильного способа отслеживания перемещаемых спрайтов относительно того, какие целевые спрайты на каждом из них находятся сверху.Отслеживание спрайтов

Как мне отслеживать эти отношения?

  • Sprite 1 - Задача 3
  • Sprite 2 - Задача 1
  • Sprite 3 - Задача 2
  • Sprite 4 - Цель 4

Sprites and Targets

+0

- эти отношения статические (т.е. sprite1 всегда ссылаются на target3) или динамические? – LearnCocos2D

+0

Динамический. Пользователь захочет переместить спрайты в «правильные» цели, но они могут помещать их в «неправильные». –

ответ

0

Создать два различных isntance изменяемые массивы, чтобы держать ваши объекты и массив, чтобы держать ваши правильные ответы, т.е.

//In your .h 
NSMutableArray *_targets; 
NSMutableArray *_moveableSprites; 
NSArray *_answers; 

//In your .m 
_targets = [[NSMutableArray alloc] init]; 
_moveableSprites = [[NSMutableArray alloc] init]; 
_answers = [[NSArray alloc] initWithObjects:@"101", @"103", @"102", @"104", nil]; 

При создании спрайты присвоить значение тега для них, т.е.

CCSprite *target1 = [CCSprite spriteWithFile:@"file.png"]; 
//Make sure target tags start from 0 and increment up 
target1.tag = 0; 

Затем перед добавлением каждого спрайта к слою добавьте их в свои соответствующие массивы, т.е.

[_targets addObject:target1]; 

Вы можете затем напишите способ проверки положения спрайта (что-то похожее на это):

- (void)checkSprites { 
    for(CCSprite *sprite in _moveableSprites) { 
     for(CCSprite *target in _targets) { 
      if(CGRectIntersectsRect(sprite.boundingBox, target.boundingBox)) { 
       if(sprite.tag == [_answers objectAtIndex:target.tag]) { 
        // Correct sprite in target.....do stuff 
       } else { 
        // Not correct sprite.....do stuff 
       } 
      } 
     } 
    } 
} 
+0

Спасибо за ответ Брэндон. Единственная сложная вещь, которую мне нужно выяснить сейчас, - это независимые от _targets. Я имею в виду, что до тех пор, пока _moveable спрайты находятся в «правильном» порядке, не имеет значения, какие _targets они находятся. Поэтому мне нужно иметь метод, который сравнивает порядок _moveable sprites vs. «правильный» порядок. –

+0

Я немного смущен, что вы имеете в виду по порядку, в котором они находятся? –

+0

Скажем, у 4 спрайтов есть метки «A», «B», «C», «D». Если пользователи перетаскивают спрайты (в этом точном порядке) в 4 _targets, они «выигрывают». Они могли бы перетащить «А» в цель 3 (и продолжить по часовой стрелке), перетащив «В» в Целевые 4 и «С» в Цели 1 и «Д» в Целевую 2. Таким образом, до тех пор, пока _moveableSprites помещены вправо порядок (идет по часовой стрелке), они победят. Это имеет смысл для вас сейчас? –

Смежные вопросы