これら 2 つの例の違いと、 preloadTextureAtlases :withCompletionHandler がどのように機能するかを理解しようとしています。コードは次のとおりです。
//GameScene.m
-(void)didMoveToView:(SKView *)view {
//First I create an animation, just a node moving from one place to another and backward.
//Then I try to preload two big atlases
[SKTextureAtlas preloadTextureAtlases:@[self.atlasA, self.atlasB] withCompletionHandler:^{
[self setupScene:self.view];
}];
アニメーションがスムーズなので、preloadTextureAtlases がバックグラウンド スレッドで読み込みを行っていると思いますか?
しかし、バックグラウンド スレッドから preloadTextureAtlases を呼び出すことに違いはありますか (または何らかの問題が発生する可能性があります)。このような:
//GameScene.m
- (void)loadSceneAssetsWithCompletionHandler:(CompletitionHandler)handler {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
[SKTextureAtlas preloadTextureAtlases:@[self.atlasA, self.atlasB] withCompletionHandler:^{
dispatch_async(dispatch_get_main_queue(), ^{
[self setupScene:self.view];
});
}];
if (!handler){return;}
dispatch_async(dispatch_get_main_queue(), ^{
handler();
});
});
}
そして、didMoveToView からこのメソッドを呼び出します。
[self loadSceneAssetsWithCompletionHandler:^{
NSLog(@"Scene loaded");
// Remove loading animation and stuff
}];