これは以前に質問されましたが、元の質問者は動的プロパティを変更する必要がなかったため、質問を解除して自分の質問に答えました。
iOS7 でスプライト キットを使用しています。実行時に 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 の実装 (およびカバー) に問題があるようです。
多分?