0

我正在尝试在后台线程上加载和初始化我的场景,以便它在加载时不会暂停 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
    });
});

就像我说的那样,一切都很好,除了每次都会崩溃的调用,但只有在线程上时才会崩溃。

4

2 回答 2

0

这可能会解决您的 addJoint 问题:

SKPhysicsJointPin* pin =[SKPhysicsJointPin jointWithBodyA:base.physicsBody bodyB:lever.physicsBody anchor:pt];

GameScene *gameScene = (GameScene*)self.scene;
[gameScene.physicsWorld addJoint:pin];
于 2014-08-05T05:14:27.297 回答
0

我昨晚发现的另一个结论。希望它对某人有用。dispatch_async 对我没有帮助。

如果您创建一个POINT(通过路径 1x1 的 SKShapeNode)并想要固定它 - 在 iOS8 中是不可能的

3x3 - 好的。该死

于 2014-09-19T18:14:58.657 回答