iOS 11 SpriteKit游戏的速度不会超过30 FPS

时间:2017-07-03 18:27:14

标签: ios iphone swift xcode

我正在使用Xcode beta来更新我的iOS应用程序之一。在为游戏添加一些新功能之后,我注意到在测试时,FPS真的很低。他们以前不是这么低。老实说,我不知道给你们的代码是什么。这可能只是贝塔的一个问题吗?还是我只是把我的游戏塞进了很多东西?

我的游戏只有342MB。它是一款完全没有3D渲染的2D游戏。我能想到的唯一一件事就是我有太多的arc4random同时出现......

编辑: 这是我认为导致问题的代码

    func getCollectable() -> SKSpriteNode {

    var collecatble = SKSpriteNode()

    if Int(randomBetweenNumbers(firstNum: 0, secondNum: 9)) == 4 {
        //Come Back
        if GamePlayController.instance.life! < 100 {
            collecatble = SKSpriteNode(imageNamed: "MonsterRobot")
            collecatble.name = "Monster"
            collecatble.physicsBody = SKPhysicsBody(rectangleOf: collecatble.size)
            collecatble.yScale = 0.09
            collecatble.xScale = 0.09

        }else{
            collecatble.name = "Empty"
        }
    }else{

        collecatble = SKSpriteNode(imageNamed: "Coin2")
        collecatble.name = "Coin2"
        collecatble.physicsBody = SKPhysicsBody(rectangleOf: collecatble.size)

    }
    if Int(randomBetweenNumbers(firstNum: 0, secondNum: 100)) == 51 {

        collecatble = SKSpriteNode(imageNamed: "Slow icon")
        collecatble.name = "SlowIcon"
        collecatble.physicsBody = SKPhysicsBody(rectangleOf: collecatble.size)
        collecatble.yScale = 0.05
        collecatble.xScale = 0.05
    }

    collecatble.physicsBody?.affectedByGravity = false
    collecatble.physicsBody?.categoryBitMask = ColliderType.DarkCloudAndCollectables
    collecatble.physicsBody?.collisionBitMask = ColliderType.Player
    collecatble.zPosition = 2


    return collecatble

}



 func randomBetweenNumbers(firstNum: CGFloat, secondNum: CGFloat) -> CGFloat {

    return CGFloat(arc4random()) / CGFloat(UINT32_MAX) * abs(firstNum - secondNum) + min(firstNum, secondNum)
}

1 个答案:

答案 0 :(得分:0)

这是一个简单的解决方法。确保您的代码以正确的顺序运行。在游戏加载时生成新的精灵时,需要确保您有足够的内存。在添加精灵时删除它们解决了我的问题。