向SKScene添加新的SKSpriteNode具有较大的间歇性延迟

时间:2013-11-22 19:45:51

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

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

按下 TestViewController 上的上述按钮,意味着调用 TestScene 上的方法(通过 TestView ),该方法将实例化一个新的SKSpriteNode子类( TestSpriteNode )并将其作为子项添加到场景中。这确实有效,但我的问题是,要添加第一个 TestSpriteNode TestScene 中会间歇性地延迟渲染新的精灵。它会不时地工作,但大部分时间它都会卡住,在多次触摸按钮后,多个精灵会同时出现,之后一切都完美无缺。我应该提一下,这个问题发生在模拟器和我的设备上。

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

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

1 个答案:

答案 0 :(得分:0)

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

如果您尚未确定所有图像都已添加到SKTextureAtlas,并在创建场景之前或期间预加载纹理图集。然后,地图集将允许您通过图像名称获取纹理,并使用它们来创建精灵,而不会出现任何纹理加载延迟。