SpriteKit fps在第一次动画调用时掉线

时间:2016-04-19 10:02:21

标签: ios sprite-kit swift2 skspritenode

我有移动对象并在移动时运行动画的功能:

func animateMove(move: MoveTo, completion: () -> ()) {
    let object = move.object
    let spriteName = "\(object.spriteName)\(move.direction.name)"

    let textures = TextureCache.loadTextures(spriteName)
    let animate = SKAction.animateWithTextures(textures, timePerFrame: moveDuration/NSTimeInterval(textures.count))

    let point = pointForColumn(move.column, row: move.row)
    let move = SKAction.moveTo(point, duration: moveDuration)
    move.timingMode = .Linear

    let group = SKAction.group([move, animate])
    object.sprite!.removeAllActions()
    object.sprite!.runAction(group, completion: completion)
}

我也有这个问题:

class TextureCache {
...

static func loadTextures(name: String) -> [SKTexture] {
    let atlas = "\(name).atlas"
    return TextureCache.sharedInstance.loadTexturesFromAtlas(atlas, name: name)
}

private func loadTexturesFromAtlas(atlas: String, name: String) -> [SKTexture] {
    if let textures = textureDictionary["\(atlas):\(name)"] {
        return textures
    }

    let textureAtlas = SKTextureAtlas(named: atlas)
    var textures = [SKTexture]()
    for i in 0..<textureAtlas.textureNames.count {
        textures.append(SKTexture(imageNamed: "\(name)\(i)"))
    }

    textureDictionary["\(atlas):\(name)"] = textures

    return textures
}

所以,问题是在第一次调用时fps显着下降并且CPU时间增加,例如:将对象移动到左侧 - 从30 fps下降到8 fps。

1 个答案:

答案 0 :(得分:0)

问题出现在我的身边,是:

let textureAtlas = SKTextureAtlas(named: atlas)
var textures = [SKTexture]()
for i in 0..<textureAtlas.textureNames.count {
    textures.append(SKTexture(imageNamed: "\(name)\(i)"))
}

现在:

let textureAtlas = SKTextureAtlas(named: atlas)
var textures = [SKTexture]()
for i in 0..<textureAtlas.textureNames.count {
    let texture = textureAtlas.textureNamed("\(name)\(i)")
    texture.size()
    textures.append(texture)
}