Awaria Sprite Kit: (typeA == b2_dynamicBody || typeB == b2_dynamicBody)

To zostało zadanewcześniej, ale oryginalny pytający nie musiał zmieniać dynamicznej własności, więc odpowiedział na swoje pytanie, odsłaniając je.

Używam Sprite Kit w iOS7 i chciałbym móc zmienić dynamiczną właściwość SKPhysicsBody w czasie wykonywania. Pierwotnie zmieniałem to w moich touchesBegan: metoda. Ktoś na forum Apple Dev zasugerował przeniesienie zmiany do metody didSimulatePhysics: ale to też nie pomogło.

Ten kod powoduje błąd:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
  if (!heyWereSwappingDynamismHere) 
  {
    heyWereSwappingDynamismHere = YES;
    SKNode * rope = [self childNodeWithName:@"rope"];
    SKNode * anchor = [rope childNodeWithName:@"anchor"];
    [listOfObjectsToSwapDynamic addObject:anchor];
  }
}

-(void) didSimulatePhysics 
{
  if (heyWereSwappingDynamismHere) 
  {
    for (SKNode * node in listOfObjectsToSwapDynamic) 
    {
        bool isItDynamic = node.physicsBody.isDynamic;
        node.physicsBody.dynamic = !isItDynamic;
    }
    [listOfObjectsToSwapDynamic removeAllObjects];
    heyWereSwappingDynamismHere = NO;
}

}

Błąd pojawiający się w debuggerze to:

Asercja nie powiodła się: (typeA == b2_dynamicBody || typeB == b2_dynamicBody), funkcja SolveTOI, plik /SourceCache/PhysicsKit/PhysicsKit-4.6/PhysicsKit/Box2D/Dynamics/b2World.cpp, linia 670.

Rozejrzałem się gdzie indziej, ale wydaje się, że jest to problem z implementacją Sprite Kit (i zakrywaniem) Box2D.

Może?

questionAnswers(2)

yourAnswerToTheQuestion