2016-03-27 3 views
2

У меня проблема. Когда я представляю новую сцену в spritekit (с объективом c), она отображает только серый цвет с количеством узлов и fps на экране.Spritekit не показывает представленную сцену

Я анимировал сцену в файле .sks, чтобы она не выглядела так. Переход, когда im, представляющий новую сцену, также работает, но он просто не показывает изображения и фон, которые я анимировал в файле .sks.

Вот код о том, как я это делаю.

//In gameviewcontroller.m 

// Creating and configuring the scene. 
GameScene *Level1 = [GameScene nodeWithFileNamed:@"GameSceneLevel1"]; 
Level1.scaleMode = SKSceneScaleModeAspectFill; 



// GameScene.m inside touchesbegan 

SKTransition *reveal = [SKTransition doorwayWithDuration:4]; 


     GameScene *Level1 = [GameScene sceneWithSize:self.view.bounds.size]; 
     Level1.scaleMode = SKSceneScaleModeAspectFill; 
     [self.view presentScene:Level1 transition:reveal]; 
+0

Вы уверены, что хотите осуществить переход к той же сцене? Вы переходите от 'GameScene' ->' GameScene' в настоящее время. – Whirlwind

+0

Нет, это было просто для тестирования, как бы вы это сделали для другой сцены :)? Я пробовал это до –

+0

Оформить заказ на мой ответ (я сделал редактирование) ... – Whirlwind

ответ

0

Вы изначально загружены сцены из .sks файл и, как вы сказали, что есть некоторые анимации там. Позже (внутри touchesBegan) вы создаете сцену, предоставляя размер (используя статический метод sceneWithSize). Таким образом, сцена не загружается из архива.

Чтобы устранить проблему, загрузите свою сцену так, как вы это делали, в GameViewController.

EDIT:

Для перехода между двумя сценами вы должны создать два .sks файлы. Вы можете назвать их следующим образом: MenuScene и GameScene (у вас уже есть этот по умолчанию). Обратите внимание: при создании этих файлов вам не нужно писать расширение (.sks), а просто имя файла. Затем вы должны создать соответствующие файлы .m и .h. Поэтому создайте MenuScene.m и MenuScene.h. GameScene.m и .h файлы есть по умолчанию.

MenuScene должен быть подклассом (необязательно прямым подклассом) SKScene.

Затем внутри контроллера вид:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    SKView * skView = (SKView *)self.view; 

    GameScene *scene = [GameScene nodeWithFileNamed:@"GameScene"]; 
    scene.scaleMode = SKSceneScaleModeAspectFill; 
    scene.size = skView.bounds.size; 

    [skView presentScene:scene]; 
} 

позже в вашей GameScene-х touchesBegan метод, если вы хотите, чтобы перейти к MenuScene, вы должны сделать что-то вроде этого:

MenuScene *nextScene = [MenuScene nodeWithFileNamed:@"MenuScene"]; 
SKTransition *transition = [SKTransition fadeWithDuration:3]; 
[self.view presentScene:nextScene transition:transition]; 

Точно так же, для перехода к GameScene в вашем меню в MenuScene выполните следующие действия:

GameScene *nextScene = [GameScene nodeWithFileNamed:@"GameScene"]; 
SKTransition *transition = [SKTransition fadeWithDuration:3]; 
[self.view presentScene:nextScene transition:transition]; 

Конечно, перед каждым переходом вы можете установить режим масштаба сцены в соответствии с режимом масштабирования старой сцены.

От вашего кода, похоже, что вы пытаетесь перейти на одну и ту же сцену: GameScene ->GameScene. Это, конечно, возможно, но вы уверены, что хотите этого?

Если это так, просто используйте код, который я предоставил для метода MenuScene touchesBegan.

+0

Хорошо, но когда я пытаюсь сделать это в GameViewController, внутри прикосновений началось это просто дает мне ошибку: «Нет видимых @interface для« UIView »объявляет селектор« presentScene: переход: »« –

+0

Будет редактировать мой ответ, чтобы показать вам, как вам следует переходить между сценами. – Whirlwind

+0

Спасибо за ответ! Я попробую это сейчас. –

Смежные вопросы