我正在为玩家加载一个选择场景,然而,当我点击移动到该场景的按钮时,它需要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){
});
});但它不会起作用。
发布于 2014-06-02 15:26:12
为了避免延迟,最好的做法是在游戏开始前或关卡选择后使用loadSceneAssetsWithCompletionHandler函数先加载所有屏幕资源。
发布于 2015-09-29 03:08:51
对于最简单的选项,我建议在当前SKScene上加载活动指示器(向属性发送startAnimating消息),在调度中加载场景,然后在最后的调度中,向stopAnimating发送活动指示器消息。
在当前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];
});https://stackoverflow.com/questions/23989113
复制相似问题