Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.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 展开序列以查看包含SpriteKit';它的速度非常慢_Ios_Iphone_Sprite Kit - Fatal编程技术网

Ios 展开序列以查看包含SpriteKit';它的速度非常慢

Ios 展开序列以查看包含SpriteKit';它的速度非常慢,ios,iphone,sprite-kit,Ios,Iphone,Sprite Kit,我刚刚开始玩SpriteKit,这个问题很快就出现了。如果我有一个视图为SKView的视图控制器,将另一个视图控制器推到其上(例如,暂停菜单或游戏结束菜单),然后使用SKView将其放回到视图控制器需要相当长的时间,以我在4S和5上的经验,大约需要一秒半的时间 您可以使用默认的Hello World模板来测试这一点。我将它设置为导航视图的根控制器,并在导航栏中插入一个按钮,以触发到新视图控制器的按下顺序。第二个视图控制器包含一个按钮,用于触发展开序列。当按钮被按下时,它会高亮显示大约一秒半,然后

我刚刚开始玩SpriteKit,这个问题很快就出现了。如果我有一个视图为SKView的视图控制器,将另一个视图控制器推到其上(例如,暂停菜单或游戏结束菜单),然后使用SKView将其放回到视图控制器需要相当长的时间,以我在4S和5上的经验,大约需要一秒半的时间

您可以使用默认的Hello World模板来测试这一点。我将它设置为导航视图的根控制器,并在导航栏中插入一个按钮,以触发到新视图控制器的按下顺序。第二个视图控制器包含一个按钮,用于触发展开序列。当按钮被按下时,它会高亮显示大约一秒半,然后最后会出现这种情况,这对用户来说是非常不和谐的


我浏览了SpriteKit文档,没有注意到任何关于正确使用segues的文章,这只是一个bug,还是在SKView之上推送新视图被认为是一种不好的做法?相反,我是否应该使用SKNodes/SKScenes来显示暂停和结束游戏菜单,从而始终保持SKView在屏幕上?

在显示菜单情节提要时,SKView(或场景)是否可能解除分配?这就解释了返回现场时的延迟。在自定义视图/场景子类的相应dealloc消息中设置断点,或在显示菜单时使用工具检查活动对象中的视图和场景

另一种可能是从内存中删除纹理,然后必须重新加载。很难说雪碧套件中可能有自动装置

尝试更改故事板的连接方式,例如,在“精灵套件”视图之前有一个“主菜单”故事板。这将是有趣的,看看你是否得到同样的效果进入视图(重复)你做回到它


FWIW我只对SK和故事板做了一些测试,但没有注意到这样的延迟。

我也遇到了类似的问题,发现很有帮助。我曾计划使用多个UIViewController导航到游戏的不同部分,如菜单屏幕、屏幕上的游戏等,但速度非常慢。在重构我的应用程序以使用单个UIViewController(其视图类型为SKView)并为我想要的每个屏幕创建新场景后,它开始正常工作。起初,我认为这是一个痛苦的过程,因为控制器最终会变得不可管理,但发现大多数逻辑在每个场景中都被封装,并且控制器仅用于呈现新场景


另外,您应该注意,可以从SKScene向SKView添加UIKit控件。这就是我所做的,以避免每次需要UIScrollView、UIButton或任何其他UIKit控件时都必须重新发明轮子。当然,在过渡时,您必须删除不希望在场景之间共享的UIKit内容

这不可能是纹理,即使我没有创建场景,只是呈现一个空白视图,我也会延迟。如果我进入我的故事板并切换到一个空白的UIView,就没有延迟。然后,当我将其切换回SKView时,即使不在场景设置代码中添加,延迟也会返回。就像我说的,我已经在4S和5上测试过了,得到了相同的结果。我应该提到我在模拟器中没有看到任何问题,如果你正在测试它的话。我还检查了一下,它没有被解除分配,所以也不可能。稍后我必须尝试反转顺序。所以,按照您的建议反转视图控制器顺序。我用UIViewController设置了一个故事板,并创建了一个到包含SKView的控制器的序列。然后,我在第一个视图控制器的viewDidLoad中调用了performsgue:withIdentifier:,这样SKView实际上就是rootViewController。这工作得非常完美,零延迟,即使每次都必须创建一个新的SKView实例来推到堆栈顶部。我很困惑。这听起来是最好的主意,因为我发布了这篇文章,我意识到在不同的场景之间转换似乎是最好的主意。我甚至没有考虑将子视图添加到视图中,我只是创建了自己的button类作为SKLabelNode子类,但这样做似乎比重新创建所有内容更有意义。我想这只是一种痛苦,我不能完全使用故事板,但也不难忍受。很好的答案。这两段内容都非常相关且简洁。但问题是——您是否以编程方式定位了大多数SKScene视图(UIKit和SK)元素?是的。我不确定这是否是最佳实践,但我总是手动定位所有东西。