我正在尝试在后台线程上加载和初始化我的场景,以便它在加载时不会暂停4秒。它运行得很好但有一个例外:我无法让SKPhysicsJointPin -addJoint工作 - 它每次都会崩溃,但只有在线程上调用它时才会崩溃。
关节设置如下:
SKPhysicsJointPin* pin =[SKPhysicsJointPin jointWithBodyA:base.physicsBody bodyB:lever.physicsBody anchor:pt];
[gameScene.physicsWorld addJoint:pin]; // this crashes on a thread!
我正在进行背景加载:
gSceneBeingLoaded = self; // keep a strong ref while loading so that we don't release the object prematurely
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void)
{
/* LOAD SCENE ON BACKGROUND THREAD */
[gSceneBeingLoaded loadSceneData];
/* SHOW SCENE ON MAIN THREAD */
dispatch_async(dispatch_get_main_queue(), ^(void)
{
[gSceneBeingLoaded presentScene];
gSceneBeingLoaded = nil; // release the extra reference
});
});
就像我说的那样,一切都很有效,除了那个每次都会崩溃的呼叫,但只有在一个线程上才会崩溃。
答案 0 :(得分:0)
这可能会解决你对addJoint的问题:
SKPhysicsJointPin* pin =[SKPhysicsJointPin jointWithBodyA:base.physicsBody bodyB:lever.physicsBody anchor:pt];
GameScene *gameScene = (GameScene*)self.scene;
[gameScene.physicsWorld addJoint:pin];
答案 1 :(得分:0)
我昨晚发现的另一个结论。希望它对某人有用。 dispatch_async NOT帮助我。
如果您创建 POINT (路径1x1的SKShapeNode)并想要固定它 - 在iOS8中是不可能的
3x3 - 好的。 该死