【问题标题】:Adding new SKSpriteNode to SKScene has large intermittent lag向 SKScene 添加新的 SKSpriteNode 具有较大的间歇性滞后
【发布时间】:2013-11-22 19:45:50
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我在link 找到了我的问题的解决方案。为不同的屏幕制作新的 SKScene 而不是新的 UIViewController 可以解决问题

标签: objective-c sprite-kit skspritenode skview skscene


【解决方案1】:

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

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

【讨论】:

  • 感谢@LearnCocos2D 的提示!这不是我的问题,但我会牢记在心。
猜你喜欢
  • 2016-07-27
  • 1970-01-01
  • 2019-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-24
  • 1970-01-01
  • 2014-10-25
相关资源
最近更新 更多