这是之前问过的,但最初的提问者不需要更改动态属性,所以他通过取消提问来回答自己的问题。
我在 iOS7 中使用 Sprite Kit,我希望能够在运行时更改 SKPhysicsBody 的动态属性。最初我在 touchesBegan: 方法中改变了它。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;
}
}
调试器中出现的错误是:
断言失败:(typeA == b2_dynamicBody || typeB == b2_dynamicBody),函数 SolveTOI,文件 /SourceCache/PhysicsKit/PhysicsKit-4.6/PhysicsKit/Box2D/Dynamics/b2World.cpp,第 670 行。
我在别处环顾四周,但这似乎是 Sprite Kit 的 Box2D 实现(和覆盖)的问题。
也许?