我遇到的问题是,在呈现场景之前,我的SKView的背景颜色(灰色)会短暂显示。
我手动尝试通过Storyboard编辑器和我的控制器(self.skView.backgroundColor = [SKColor blueColor]
)设置它,但它仍然是灰色的。这不是可以覆盖的属性吗?
更新#1
以下是对发生的事情的一点解释:
viewDidLoad
被调用,屏幕上显示skView
,带有灰色背景(skView.scene
尚未设置)。的ViewController
- (void)viewDidLoad
{
[self.activityIndicator startAnimating];
[self authenticatePlayer];
self.skView.backgroundColor = [SKColor blueColor];
// During this time the grey screen is visible as the assets are being loaded and take ~1 second
// self.skView.scene is NULL here so I cannot set the backgroundColor...
[GamePlayScene loadSceneAssetsWithCompletionHandler:^{
[self.activityIndicator stopAnimating];
self.activityIndicator.hidden = YES;
CGSize viewSize = self.skView.bounds.size;
self.gamePlayScene = [[GamePlayScene alloc] initWithSize:viewSize];
self.adView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
[self.skView presentScene:self.gamePlayScene];
}];
...
答案 0 :(得分:3)
我担心您要么必须使用最基本的设置(如设置backgroundColor)呈现场景,然后加载其余部分,或者在加载游戏场景之前呈现“加载”场景,然后替换它。
答案 1 :(得分:0)
我认为你错误地认为是SKScene property of the same name:
self.scene.backgroundColor = [SKColor blueColor];
请注意self.scene
(也self.view
)将为nil,直到将节点作为子节点添加到另一个节点(已经是场景图的一部分)之前,直到呈现场景为止。
答案 2 :(得分:0)
在呈现视图之前,您应该能够在呈现视图控制器SkView
中设置viewDidLoad
背景颜色。这不会发生吗?
假设您已将其添加到父节点
答案 3 :(得分:0)
使用sprite kit的基本模板我可以使用GameViewController.m文件中的代码将背景设置为黑色:
- (void)viewDidLoad
{
[super viewDidLoad];
// Configure the view.
SKView * skView = (SKView *)self.view;
skView.showsFPS = YES;
skView.showsNodeCount = YES;
/* Sprite Kit applies additional optimizations to improve rendering performance */
skView.ignoresSiblingOrder = YES;
// Create and configure the scene.
GameScene *scene = [GameScene sceneWithSize:skView.bounds.size];
scene.scaleMode = SKSceneScaleModeAspectFill;
scene.backgroundColor = [UIColor blackColor];
// Present the scene.
[skView presentScene:scene];
}
不确定这是否正是您所寻找的,但它摆脱了似乎没有消失的灰色背景。在你的情况下,我认为你会想要设置" gamePlayScene"初始化场景后的背景颜色属性。
希望这有帮助!