我在SceneKit启动项目中看到非常不一致的帧速率.有时它以60 fps(12ms渲染,6ms金属冲洗)持续运行,有时它以40 fps(20ms渲染,6ms金属冲洗)不断运行,不多也不少.
当我重新打开应用程序时,帧速率随机变化,并将保持该帧速率,直到下次重新打开.我尝试切换到OpenGL ES,虽然它似乎在初学者项目中修复它,但我仍然在我的真实应用程序中看到这些下降.
初学者项目未经修改(旋转船),我正在Xcode 7.0和运行iOS 9.0.1的iPad Mini 4上进行测试.我不确定是什么导致了问题,SceneKit,iOS或我的设备.
编辑:这是一个金属系统跟踪,第一部分以60fps运行,第二部分我按下主页按钮并重新打开应用程序,它以40fps运行.看起来第二部分有很多颜色加载/存储.
当我四处寻找有关spritekit纹理的信息时,我偶然发现了这个引用:
如果节点的所有子节点使用相同的混合模式和纹理图集,那么Sprite Kit通常可以在单个绘图过程中绘制这些精灵.另一方面,如果对子项进行组织以便为每个新精灵更改绘制模式,那么Sprite Kit可能会作为每个精灵的一个绘图传递执行,这是非常低效的.
但看看这个:
具有相同纹理的瓷砖(我向你保证它是一种纹理,而不仅仅是一种颜色)

瓷砖有自己的纹理

尽管使用的所有纹理来自相同的图集,但绘制计数的差异为40.
我在解释"地图集"这个词错了吗?
这是我存储图像的地方:

我的例子是'纹理图集',还是'atlas'的定义是一个单独的.png,其中包含了所需的所有图像,并且从中切割出单个图块?
或者问题可能在于我如何加载/其他东西?
谢谢!
我一直在使用SKLightNodeSpriteKit(iOS8中的新功能)进行实验,即使是在一个非常简单的测试用例中,我的性能也非常糟糕.例如,在纯色的单个光源上,我在第3代iPad上获得13.2 FPS.如果我添加第二个光源,它会下降到一个非常糟糕的7.7 FPS.SKSpriteNode
WWDC会话视频SpriteKit中的新功能提到如果你在同一个精灵上有多个灯光,你可能会得到低于60 FPS,但我甚至不能得到60 FPS.这是相关部分.
这是我在swift中的测试场景(它从一个光源开始,可以通过点击添加更多):
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
let center = CGPointMake(size.width / 2.0, size.height / 2.0)
let background = SKSpriteNode(color: SKColor.lightGrayColor(), size: size)
background.position = center
background.lightingBitMask = 1
addChild(background)
let light = SKLightNode()
light.position = center
light.falloff = 1.0
light.lightColor = SKColor(hue: 0.62 , saturation: 0.89, brightness: 1.0, alpha: 0.4) …Run Code Online (Sandbox Code Playgroud) 我刚刚更新到iOS 9,却发现我的应用程序中的多个图像不再显示.由于某种原因,所有SpriteKit文本都是黄色的(以前是白色的).
有问题的图像是2D精灵,用精灵套件渲染,但在哪个显示和哪个不显示之间似乎没有很大的一致性.当然,没有背景显示,有些图像显示为白色框(但不是红色X).
其他精灵是颠倒的,或在Y中翻转,就像坐标系已经颠倒一样.并且似乎不再显示粒子效果.
我应该在不久前尝试过测试版,因为这会破坏我的实时应用程序(我现在已经删除了).但有没有其他人经历过类似的事情?或者可能知道什么是错的?在我看来主要是一个SpriteKit问题,然而,纹理地图集的所有精灵似乎都运行良好.
更新:
我意识到这是我的所有精灵都不在纹理地图集中.我在这里找到了一个论坛帖子:https://forums.developer.apple.com/thread/13358,说iOS9要么代码中的每个资产名称都需要".png"扩展名,要么你可以删除并重新添加所有资产目录中的资产.难以置信的!
这篇文章遇到了类似的问题,显然解决方案是将所有地图集添加到XCAssets,然后将目标设置为最新的iOS.但是你失去了与iOS8的向后兼容性.
我注意到我的精灵套件游戏中的fps大幅下降,从iOS 8.4升级到iOS 9.还有其他人遇到过吗?
我的纹理地图集仍然埋藏在.atlas文件中.我试图使用资产目录纹理图集功能作为实验,并且性能更差.
sprite-kit ×4
ios9 ×2
swift ×2
drawing ×1
frame-rate ×1
ios ×1
ios8 ×1
metal ×1
objective-c ×1
scenekit ×1
sklightnode ×1
sktexture ×1
upgrade ×1
xcode7 ×1