1

我有一个标准的 UIViewController ( TestViewController ),在这个控制器的viewWillLayoutSubviews方法中,我实例化了一个新的 SKView 子类 ( TestView ),并将它作为子视图添加到控制器的视图中。此外,我添加了一些按钮,这些按钮旨在让用户控制 SKScene 子类 ( TestScene ) 中的操作。TestScene在TestView的init方法中实例化。在 TestView 作为子视图添加到 TestViewController 的视图之后立即调用[testView presentScene]这是TestView上的一个方法,它只是调用[自我presentScene:testScene]

按下TestViewController上提到的按钮意味着调用TestScene上的一个方法(通过TestView),该方法将实例化一个新的 SKSpriteNode 子类(TestSpriteNode)并将其作为子类添加到场景中。这确实有效,但我的问题是,对于第一个要添加的TestSpriteNode , TestScene呈现新的精灵会间歇性地长时间延迟。有时它可以完美运行,但大多数情况下它会卡住,多次触摸按钮后会同时出现多个精灵,之后一切正常。我应该提到这个问题发生在模拟器和我的设备上。

我尝试在TestScene 的- (void)didMoveToView:(SKView*)view中添加一个新的TestSpriteNode ,导致TestSpriteNode立即出现,然后在按下按钮添加新的TestSpriteNode时出现延迟。通过在TestScene上按下按钮调用的方法添加断点,我可以看到它被立即调用,但添加的TestSpriteNode不会立即呈现。

如果已经有一个解决动态添加的 SKSpriteNodes 渲染延迟的答案,我提前道歉,我无法找到它。关于将新的 SKSpriteNodes 添加到 SKScene,我有什么误解吗?

4

1 回答 1

0

没有代码很难说。但请考虑一下:如果精灵使用尚未加载到内存中的纹理,则创建精灵会将图像文件作为纹理加载。图像越大,加载它所需的时间就越长。对于使用相同纹理的后续精灵,这不会发生。

如果您尚未确保将所有图像添加到 SKTextureAtlas,请在创建场景之前或同时预加载纹理图集。然后,该图集将允许您按图像名称获取纹理并使用它们来创建精灵,而不会出现任何纹理加载延迟。

于 2013-11-22T21:24:12.740 回答