我试图创建一个游戏,并遵循Apple的建议,我正在使用多个场景。 您可以将游戏视为文本重点并单击冒险。
存在问题。很多文本,做了一些搜索,似乎是推荐的方式,或者说当前唯一的方法是使用UITextView
因此:
[self.view addSubview: textView];
如果你只有一个SKScene
,这就好了,因为那是当前视图/ SKView显示的场景。
我的问题是,当我将文本添加到我的场景的*视图中时,该视图不是应用程序加载的第一个场景(第三个或更高版本),应用程序会跳回到它加载的第一个场景(是我的菜单场景)并愉快地显示所需的文本。
有人知道为什么吗?我有菜单场景转换到场景一,到场景二(我希望显示测试)。
请不要说每个场景需要一个视图,如果我想在每个场景中显示多个单词,那真的没有意义,但也许我对SpriteKit的使用也没有。
我仍然感到惊讶的是,没有SK等价于UITextView
。
无论如何,任何帮助,指针都会很棒,谢谢。
好的,这是代码的相关部分......我想。 控制器:
- (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];
}
其中GTMainMenu
是SKScene
的子类,并且有一个按钮(橙色框)到“act”(GTScene
的子类,它本身是{{1}的子类}),这将导致转换到act,它有第一个场景的另一个按钮。
只有你永远不会进入现场,因为SKScene
会让你回到主菜单。
这是场景的viewDidLoad,会导致它“跳转”回主菜单:
viewDidLoad
有一个git repo here。
这是我项目的条纹版本,删除了与手头问题无关的所有内容。
如果您原谅代码,那么我的日常工作就是Java,而目前我正在努力解决Objective C中的某些概念。 哦,对不起,我设法包括用户设置:S
答案 0 :(得分:1)
您的视图控制器的viewWillLayoutSubviews方法无法防止重复执行。此方法不仅会在应用启动时运行,而且每次视图旋转并调整大小时都会运行。
在使用该方法创建/呈现场景之前添加一个检查:
if(self.view.scene == nil) { /* present scene */ }
答案 1 :(得分:1)
你有没有看过SKLabelNode?我在SpriteKit游戏中广泛使用它。如果你需要你的SKLabelNode做任何花哨的东西(物理等),你可以把它添加到父SKSpriteNode。