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?