Bil*_*oto 3 dynamic box2d ios7 sprite-kit skphysicsbody
之前曾问过这个问题,但最初的提问者不需要改变动态属性,所以他通过取消它来回答他自己的问题.
我在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;
}
Run Code Online (Sandbox Code Playgroud)
}
调试器中出现的错误是:
断言失败:(的typeA == b2_dynamicBody || TYPEB == b2_dynamicBody),功能SolveTOI,文件/SourceCache/PhysicsKit/PhysicsKit-4.6/PhysicsKit/Box2D/Dynamics/b2World.cpp,670路.
我在其他地方环顾四周,但这似乎是Sprite Kit实现(并覆盖)Box2D的一个问题.
也许?
您可以dynamic来回更改属性,但是,如果您使用碰撞/接触检测,则应该非常小心.
在两个物体碰撞/接触期间,断言它们中的至少一个必须是动态物体.如果在运行时将该属性更改为NO,并且另一个联系的主体也是静态的(非动态的),并且发生了碰撞/联系回调,则会抛出此特定断言错误 - 将在2个静态主体之间检测到联系 - 执行,Box2d不喜欢.
一个可能的解决方法技巧 - 适用于我,甚至直接在didBeginContact:方法中:
SKPhysicsBody *temp = node.physicsBody;
temp.dynamic = NO;
node.physicsBody = temp;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
960 次 |
| 最近记录: |