1

我试图创建一个游戏,并按照 Apple 的建议使用多个场景。您可以将游戏视为文本重点和点击冒险。

问题就在于此。大量文本,经过一番搜索,似乎是推荐的方式,或者说目前唯一的方法是UITextView这样:

[self.view addSubview: textView];

如果您只有一个,这一切都很好SKScene,因为那是当前视图/SKView 正在显示的场景。

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

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

如果我想在每个场景中显示多个单词,请不要说我需要每个场景的视图,这真的没有意义,但也许我对 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,并且有一个按钮(橙色框)到“动作”( 的子类GTScene,本身是 的子类SKScene),这将导致到动作的转换,该动作有另一个按钮到第一个场景。只有您永远不会到达现场,因为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 repo 可用。

这是我项目的精简版本,删除了与手头问题无关的所有内容。

请原谅我的代码,我的日常工作是 Java,而我目前正在努力处理 Objective C 中的某些概念。哦,对不起,我设法包含了用户设置:S

4

2 回答 2

1

您的视图控制器的 viewWillLayoutSubviews 方法无法防止重复执行。此方法不仅会在应用启动时运行,而且会在每次视图旋转和调整大小时运行。

在该方法中创建/呈现场景之前添加检查:

if(self.view.scene == nil) { /* present scene */ }
于 2014-03-10T07:48:04.353 回答
1

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

于 2014-04-20T19:31:08.777 回答