我正在为播放器加载选择场景,但是,当我点击移动到该场景的按钮时,它需要4-5秒才能显示新场景。
在主菜单中我使用:
SKTransition *transition = [SKTransition fadeWithDuration:0.1];
SKScene * scene = [[SelectionScene alloc] initWithSize:self.size];
[self.view presentScene:scene transition:transition];
在SelectionScene中我使用:
- (id) initWithSize:(CGSize)size
{
if (self = [super initWithSize:size]) {
[self setupScene];
[self setupSelection];
}
return self;
}
如上所述,点击按钮之间需要4-5秒,直到它移动到下一个场景。有没有办法稍后设置场景,所以它首先显示下一个场景(我将显示一个加载屏幕)并在后台加载?
我尝试过使用:
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){
//Background Thread
dispatch_async(dispatch_get_main_queue(), ^(void){
});
});
但它不起作用。
答案 0 :(得分:2)
为避免延迟,最佳做法是在游戏开始前或选择关卡之后使用loadSceneAssetsWithCompletionHandler函数首先加载所有屏幕资源。
答案 1 :(得分:0)
对于最简单的选项,我建议在当前SKScene上加载一个活动指示器(向属性发送startAnimating消息),在调度中加载场景,然后在最后一个调度内,向活动指示器发送一条消息停止动画。
在当前SKScene对象的界面中包含此属性:
@property(strong, nonatomic) UIActivityIndicatorView *activityIndicator;
然后无论你在哪里加载场景(即touchesEnded事件),都要使用以下内容:
[self.activityIndicator startAnimating];
dispatch_async(dispatch_get_main_queue(), ^{
PVZLevelScene *levelScene =
[[PVZLevelScene alloc] initWithSize:self.size level:theSelectedLevel];
[self.view presentScene:levelScene
transition:[SKTransition flipHorizontalWithDuration:0.5]];
[self.activityIndicator stopAnimating];
});