Это предложение было задано earlier, но первоначальному аферу не нужно было менять динамическое свойство, поэтому он ответил на свой вопрос, разоблачив его.Sprite Kit failing assertion: (typeA == b2_dynamicBody || typeB == b2_dynamicBody)
Я использую Sprite Kit в iOS7, и я хотел бы иметь возможность изменять динамическое свойство SKPhysicsBody во время выполнения. Первоначально я менял это в своем методе touchBegan:. Кто-то из форума Apple Dev предложил переместить изменение в метод didSimulatePhysics: но это тоже не помогло.
Этот код вызывает ошибку:
-(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;
}
}
Ошибка появляется в отладчик:
Assertion failed: (typeA == b2_dynamicBody || typeB == b2_dynamicBody), function SolveTOI, file /SourceCache/PhysicsKit/PhysicsKit-4.6/PhysicsKit/Box2D/Dynamics/b2World.cpp, line 670.
Я огляделась в другом месте, но это, кажется, к быть проблема с реализацией Sprite Kit (и покрытие) Box2D.
Может быть?
попробуйте создать новое тело, заменяющее предыдущее, или, возможно, вам не нужно, чтобы оно было статичным, но вы не хотели бы, чтобы он сталкивался с чем-либо. В этом случае используйте категории контактов и установите гравитационную шкалу в 0, это будет иметь тот же эффект, что и статическое тело. В bix2d вы не можете изменить тело от статического к динамическому и наоборот, я думаю, что это одинаково для комплекта спрайтов. – LearnCocos2D
Возможно, релевантно: http://www.box2d.org/forum/viewtopic.php?f=3&t=7643 https://code.google.com/p/box2d/source/detail?r=235 – iforce2d