【发布时间】:2016-09-02 16:55:45
【问题描述】:
我正在使用 SpriteKit 制作我的第一款游戏,其中敌人从一侧进入屏幕并从另一侧离开屏幕。我注意到在游戏后期渲染不同类型的敌人时,FPS 下降,CPU 使用率接近 100%(~95-99%)。我使用了两个仪器调试工具,结果如下:
在时间分析器工具中,我发现main 我认为是appDelegate 的主体是问题所在。我知道这可能看起来很明显,但我很惊讶地看到像update 这样的函数在GameScene 几乎不是问题。有没有办法对此进行更深入的研究?如果它是我的功能之一导致问题,我觉得好像更容易评估我搞砸的地方。
这是我添加普通外星人的代码:
func addNormAlien(){
let mult = normAlienMultiplers
let alienInst = normAlien(startPos:CGPoint(x: 10,y: 10), speed: random(UInt32(10),max: UInt32(50))*mult[0])
let yStart = random(UInt32(alienInst.size.height/2), max: UInt32(size.height-alienInst.size.height))
alienInst.position = CGPoint(x:size.width+alienInst.size.width/2, y:CGFloat(yStart))
addChild(alienInst)
totalNodes+=1
}
这是否有点意料之中,因为继续实例化新精灵的成本很高(尽管我很少一次超过 20 个)?我这样做只是为了确保它们的随机传播。
我也找不到太多关于纹理大小的信息——有使用约定吗?目前,我发现自己制作了相当大的精灵纹理,然后使用setScale 缩小它们,而不是在图像编辑器中这样做。
这些纹理和动画也(预加载?)在我的 GameScene 文件的开头,带有类似
let laserTexture = SKTextureAtlas(named:"Sprites").textureNamed("laserTexture")`
和
let shipFrames = ["ship0","ship1","ship2","ship3","ship4","ship5","ship6","ship7","ship8","ship9","ship9","ship9","ship8","ship7","ship6","ship5","ship4","ship3","ship2","ship1","ship0"].map{textureAtlas.textureNamed($0)}`
就在之前:class GameScene: SKScene, SKPhysicsContactDelegate {
因此可以从我的 Sprite 类中访问,如下所示:
super.init(texture: shipStartTexture, color: UIColor.clearColor(), size: shipStartTexture.size())
和
func animateShip1() {
let animate = SKAction.animateWithTextures(shipFrames, timePerFrame: 0.1)
let forever = SKAction.repeatActionForever(animate)
self.runAction(forever)
}
如果有更好的预分配纹理的方法,我很想知道,并且任何关于如何评估其他一些问题的进一步见解都会很棒!
【问题讨论】:
标签: swift xcode sprite-kit instruments