2012-01-24 2 views
0

я всегда использую контакт слушателя таким образом:контакт слушателя, кто прикасается к кому?

b2Body *bodyA=contact.fixtureA->GetBody(); 
b2Body *bodyB=contact.fixtureB->GetBody(); 
. 
. 
CCSprite *actora = (CCSprite*)bodyA->GetUserData(); 
CCSprite *actorb = (CCSprite*)bodyB->GetUserData(); 
. 
. 
if ([actora tag] == 6 && ([actorb tag]== 4 || [actorb tag]== 5) ) // question !! 
//do stuff here 

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

Я не хочу проверять все условия и хочу знать, что алгоритм знает об этом. Я думал, что первое тело на экране получает a (первый определенный спрайт). это было правильно, пока я не нашел это неправильно :)

так, как бы я знал a/b, который есть? (это случайный?)

большое спасибо.

ответ

1

Смотреть все body в space связан через связанный список, и вы должны путешествовать в список, чтобы получить необходимый элемент, он не похож на array, через которую мы можем выбрать любой элемент без перемещения списка.

Итак, в нашем случае это связанный список, и нам нужно пройти через путь связи, и мы не знаем, какое тело мы получим первым. Поэтому мы должны изучить оба условия. Другого способа это не найти.

Так это выглядит случайную :-)

Это все связано список.

Thanks

+0

получил вас. НО я уверен, что есть какая-то рутина при перемещении по списку, например, я видел, что тела ALWAYS, которые сначала создавали, называются первыми. подумайте об этом, о своем классе, который кто-то написал, я уверен, что есть какое-то правило знать, кто будет называться первым в определенном состоянии. Я уже это доказал. – Curnelious

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