将UITextView添加到SpriteKit中的场景中

我试图创build一个游戏,并遵循苹果的build议,我正在使用多个场景。 你可以认为游戏是一个文本的重点和点击冒险。

这就是问题所在。 大量的文本,做了一些search,似乎是推荐的方式,或者更确切地说,目前唯一的方法是使用UITextView

 [self.view addSubview: textView]; 

如果您只有一个SKScene ,那么这是非常好的,因为这是当前视图/ SKView所显示的场景。

我的问题是,当我添加文本到我场景的*视图,这不是应用程序加载的第一个场景(它的第三个或更高),应用程序跳回到它加载的第一个场景(这是我的菜单场景),并愉快地显示所需的文字。

有人知道为什么吗? 我有菜单场景过渡到场景一,到场景二(我希望显示testing)。

如果我想要在每个场景中显示一些以上的单词,请不要说每个场景都需要一个视图,这只是没有意义,但是也许不会使用SpriteKit。

我还是有些什么惊呆了,没有UITextView SK等价物。

无论如何,任何帮助,指针会很好,谢谢。

好的,这里是代码的相关部分….我想。 控制器:

 - (void)viewWillLayoutSubviews { [super viewWillLayoutSubviews]; // Configure the view. SKView *skView = (SKView *)self.view; skView.showsFPS = YES; skView.showsNodeCount = YES; skView.showsDrawCount = YES; // Create and configure the scene. SKScene *scene = [[GTMainMenu alloc] initWithSize:skView.bounds.size]; // Present the scene. [skView presentScene:scene]; } 

其中GTMainMenuGTMainMenu的一个子类,并且有一个button(橙色框)给一个“act”( GTScene一个子类,它自己是SKScene一个子类),这将导致一个转换到act,它有另一个button到第一个现场。 只有你永远不会到场,因为viewDidLoad返回到主菜单。

这是场景的viewDidLoad,这将导致它跳转回主菜单:

 - (void)didMoveToView:(SKView *)view { [super didMoveToView:view]; if (!self.contentCreated) { [self createSceneContents]; self.contentCreated = YES; } UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(self.size.width/2, self.size.height/2+20, 200, 40)]; textView.center = self.view.center; textView.textColor = [UIColor blackColor]; textView.font = [UIFont systemFontOfSize:17.0]; textView.backgroundColor = [UIColor whiteColor]; textView.text = @"Where am I?"; [self.view addSubview:textView]; } 

这里有一个git回购。

这是我的项目的一个分解版本,删除所有与手头问题无关的东西。

如果你可以原谅这些代码,我的日常工作就是Java,而我目前正在努力克服Objective C中的某些概念。 哦,对不起,我设法包括usersettings:S

您的视图控制器的viewWillLayoutSubviews方法不能防止重复执行。 此方法不会在应用程序启动时运行,而是每次视图旋转和resize。

在创build/呈现场景之前添加一个检查:

 if(self.view.scene == nil) { /* present scene */ } 

你看过SKLabelNode吗? 我在我的SpriteKit游戏中广泛使用它。 如果你需要你的SKLabelNode做任何事情(物理等),你可以将它添加到父SKSpriteNode。