无法设置SKView backgroundColor

时间:2014-02-26 20:54:59

标签: ios objective-c ios7 sprite-kit skview

我遇到的问题是,在呈现场景之前,我的SKView的背景颜色(灰色)会短暂显示。

我手动尝试通过Storyboard编辑器和我的控制器(self.skView.backgroundColor = [SKColor blueColor])设置它,但它仍然是灰色的。这不是可以覆盖的属性吗?

更新#1

以下是对发生的事情的一点解释:

  1. viewDidLoad被调用,屏幕上显示skView,带有灰色背景(skView.scene尚未设置)。
  2. 我加载了游戏的所有资源(大约需要1秒),在此期间可以看到灰色背景。
  3. 加载资源后,我加载场景并呈现它(灰色屏幕被替换为场景内容)
  4. 的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];
    
        }];
        ...
    

4 个答案:

答案 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"初始化场景后的背景颜色属性。

希望这有帮助!