2014-08-05 5 views
0

Я пытаюсь загрузить и инициализировать свою сцену в фоновом потоке, чтобы она не останавливалась на 4 секунды, пока она загружается. Он отлично работает с одним исключением: я не могу заставить SKPhysicsJointPin -addJoint работать - он срабатывает каждый раз, но только если он вызывается в потоке.Как получить SKPhysicJoint -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

Это может решить вашу проблему addJoint:

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

GameScene *gameScene = (GameScene*)self.scene; 
[gameScene.physicsWorld addJoint:pin]; 
+0

Нет, это ничего не меняет, потому что это по существу так же, как и в gameScene. Просто для усмешек я попробовал, но, конечно, он все еще падает в -addJoint. У меня такое ощущение, что по какой-то причине звонок не является потокобезопасным. – BGreenstone

0

Другой вывод, который я нашел вчера вечером. Надеюсь, это будет полезно для кого-то. dispatch_async НЕ помогает мне.

При создании POINT (SKShapeNode по пути 1x1) и хотите прикрепить его - это невозможно в iOS8

3x3 - ок. Damn

+0

интересно, я вернулся сюда сейчас в 2016 году с другим старым проектом, разбитым в ios8. Googled для SKPhysicJoint addJoint. И снова, он был выдержан до 1x1 пункта. Не делай это! Использовать 3x3 – djdance