【发布时间】:2014-02-25 07:35:34
【问题描述】:
这是被问到earlier,但原来的提问者不需要更改动态属性,所以他通过取消提问来回答自己的问题。
我在 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 实现(和覆盖)的问题。
也许?
【问题讨论】:
-
尝试创建一个新的主体来替换之前的主体,或者您可能不需要它是静态的,但您不希望它与任何东西发生碰撞。在这种情况下,使用接触类别并将重力比例设置为 0,这将具有与静态物体相同的效果。在 bix2d 中,您不能将身体从静态更改为动态,反之亦然,我想 sprite kit 也是如此。
标签: dynamic ios7 box2d sprite-kit skphysicsbody