【发布时间】:2016-01-20 21:43:40
【问题描述】:
编辑:好的,即使是空的 SpriteKit 场景也会发生这种情况! 这里有什么问题? 为什么 iOS 需要 2 秒才能显示 SpriteKit 场景??
编辑 2:我第一次单击选项卡栏以显示带有 SKScene 的视图控制器时,它会立即显示,但每次我尝试导航回此视图控制器时,它都需要 2 秒才能显示!
我的应用中有一个标签栏控制器,其中包含多个不同的视图控制器。
其中一个包含一个 SpriteKit 场景,有几个节点,其中 5 个,没有太重。
在模拟器中一切都很好,但是在设备上进行测试时,我注意到有时在使用 SpriteKit 场景更改为 ViewController 时会出现很大的停顿(大约 2 秒!)。
其他时候没有暂停,立即显示视图。
现在,我知道我在这里做错了什么,因为 iOS 肯定能够处理这个问题。
这是我在带有 spriteKit 场景的 viewController 中的 viewDidLoad 函数:
override func viewDidLoad() {
super.viewDidLoad()
if let scene = MyScene(fileNamed:"MyScene") {
// Configure the view.
scene.switchView = switchView
let parentNode = scene.childNodeWithName("WholeObject") as! SKSpriteNode
let contentNode = scene.childNodeWithName("CenterNode") as! SKSpriteNode
addPhotoToFrame(contentNode, photoName: "woman", maskName: "circleMask")
let node1 = parentNode.childNodeWithName("node1") as! SKSpriteNode
addPhotoToFrame(zealNode1, photoName: "motherCircleImage", maskName: "circleMaskSmall")
let node2 = parentNode.childNodeWithName("node2") as! SKSpriteNode
addPhotoToFrame(zealNode2, photoName: "hairstylistCircleImage", maskName: "circleMaskSmall")
let node3 = parentNode.childNodeWithName("node3") as! SKSpriteNode
addPhotoToFrame(zealNode3, photoName: "dietCircleImage", maskName: "circleMaskSmall")
let skView = self.view as! SKView
skView.showsFPS = true
skView.showsNodeCount = true
/* Sprite Kit applies additional optimizations to improve rendering performance */
skView.ignoresSiblingOrder = true
/* Set the scale mode to scale to fit the window */
scene.scaleMode = .AspectFill
skView.presentScene(scene)
}
}
【问题讨论】:
-
您是否在预加载图形尝试首先使用纹理图集预加载图形或尝试在单独的线程中绘制所有绘图 OpenGL 绘图取决于图形的大小(宽度和高度)而不是图形的数量其次,为什么你最后向根容器添加视图只是尝试先添加视图,然后再添加场景,最后再进一步绘制
-
问题是即使在完全空旷的场景中也会发生这种情况!所以我不认为问题出在图形上。它也很不一致...我觉得我应该设置一些缓存标志或其他东西来解决这个问题...
-
你有没有尝试先添加视图,然后是场景,然后是 gfx
-
view 是由其UIViewController 管理的SKView,由标签栏控制器管理。所以我想它首先添加对吗?我尝试用一个丰富的场景替换上面的代码,结果完全一样。您是否建议我在 viewDidLoad 函数添加场景后等待一段时间?
标签: ios swift sprite-kit