Не удалось установить SKView backgroundColor

У меня проблема, когда мой цвет фона SKView (серый) на короткое время отображается до того, как будет представлена ​​сцена.

Я вручную попытался установить его, как через редактор Storyboard, так и в мой контроллер (self.skView.backgroundColor = [SKColor blueColor]), но он остается серым. Это не атрибут, который можно переопределить?

Обновление # 1

Вот небольшое объяснение того, что происходит:

  • viewDidLoad вызывается и skView отображается на экране с серым фоном (skView.scene еще не установлен).
  • Я загружаю все игровые ресурсы (которые занимают ~ 1 секунду), и в этот момент отображается серый фон.
  • После загрузки ресурсов я загружаю сцену и представляю ее (серый экран заменяется на содержимое сцены)

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];

    }];
    ...

Ответ 1

Я боюсь, вам придется либо представить свою сцену с самой базовой настройкой (например, установкой backgroundColor), а затем загрузить остальную часть или представить сцену загрузки до загрузки сцены геймплея, а затем заменить ее.

Ответ 2

Я думаю, вы ошибаетесь в отношении свойства SKScene с таким же именем:

self.scene.backgroundColor = [SKColor blueColor];

Обратите внимание, что self.scene (также self.view) будет равно nil до тех пор, пока node не будет добавлен как дочерний элемент в другой node (который уже является частью графика сцены) соответственно до тех пор, пока сцена не будет представлена.

Ответ 3

Вы должны иметь возможность установить цвет фона SkView в контроллерах представления представления viewDidLoad - перед представлением представления. Разве это не происходит?

Если вы добавили его в родительский node

Ответ 4

Используя базовый шаблон для комплекта спрайтов, я смог установить фон в черный цвет с помощью этого кода внутри файла 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" после инициализации сцены.

Надеюсь, это поможет!