Я пытаюсь загрузить и инициализировать свою сцену в фоновом потоке, чтобы она не останавливалась на 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
});
});
Как я уже сказал, все работает отлично подходит для этого один вызов, кроме что приведет к сбою каждый раз, но только когда на нитке.
Нет, это ничего не меняет, потому что это по существу так же, как и в gameScene. Просто для усмешек я попробовал, но, конечно, он все еще падает в -addJoint. У меня такое ощущение, что по какой-то причине звонок не является потокобезопасным. – BGreenstone