Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将UITextView添加到SpriteKit中的场景_Ios_Uitextview_Sprite Kit_Skscene_Skview - Fatal编程技术网

Ios 将UITextView添加到SpriteKit中的场景

Ios 将UITextView添加到SpriteKit中的场景,ios,uitextview,sprite-kit,skscene,skview,Ios,Uitextview,Sprite Kit,Skscene,Skview,我试图创造一个游戏,并按照苹果的建议,我使用多个场景。 你可以认为游戏是一个文本重点,点击冒险。 这就是问题所在。大量文本,在进行了一点搜索之后,这似乎是推荐的方法,或者更确切地说,当前唯一的方法是使用UITextView,因此: [self.view addSubview: textView]; 如果只有一个SKScene,这一切都很好,因为当前视图/SKView正在显示该场景 我的问题是,当我将文本添加到场景的*视图时,它不是应用程序加载的第一个场景(它是第三个或更高的场景),应用程序会跳

我试图创造一个游戏,并按照苹果的建议,我使用多个场景。 你可以认为游戏是一个文本重点,点击冒险。

这就是问题所在。大量文本,在进行了一点搜索之后,这似乎是推荐的方法,或者更确切地说,当前唯一的方法是使用
UITextView
,因此:

[self.view addSubview: textView];
如果只有一个
SKScene
,这一切都很好,因为当前视图/SKView正在显示该场景

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

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

如果我想在每个场景中显示超过一把单词,请不要说我需要每个场景的视图,这真的没有意义,但我对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];
}
如果
gtmain菜单
SKScene
的子类,并且有一个按钮(橙色框)指向“act”(一个
GTScene
的子类,本身就是
SKScene
)的子类),这将导致转换到act,其中有另一个按钮指向第一个场景。 只有您永远无法到达场景,因为
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];
}
有一个吉特回购可用

这是我项目的一个分条版本,删除了所有与手头问题无关的内容

请原谅我的代码,我的日常工作是Java,目前我正在与Objective C中的某些概念作斗争。
哦,很抱歉,我设法包含了usersettings:S

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

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

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

你调查过了吗?我在我的SpriteKit游戏中广泛使用了它。如果需要SKLabelNode执行任何操作(物理等),只需将其添加到父SKSpriteNode即可。

感谢您的编辑。我不确定这是否是特定于iOS的,尽管“游戏”是iOS游戏。我认为OSX上也可能存在这个“问题”;我明白了,人们跟着标签走d突然出现的“跳回到前一个场景”强烈表明您的编程错误,但您没有提供您编写的任何与上下文相关的代码,因此我们无法提出任何建议。添加了代码示例,并链接到一个git repot,该文件表明我的视图控制器.h文件是错误的,因为我的视图控制器显然没有场景属性<代码>#导入#导入@interface GTViewController:UIViewControllerDoh!只需要一点铸造。谢谢你学习COS2D,问题解决了。从中学到的经验教训中,了解框架的生命周期。我需要添加格式化文本,而不是几个单词,SKLabelNode似乎无法处理这个问题。这是我第一次打电话。令我惊讶的是,许多游戏的屏幕都是文字密集的任务说明屏幕,但据我所知,SpriteKit并不支持这一点。可能只是我滥用了框架。试试看,它是一个围绕NSAttributed字符串的奇妙包装器。在RTF文件中编写文本密集型屏幕,以及提供给您的所有格式选项,非常容易。