iOS 11 SpriteKit游戏获胜';不要超过每分钟30帧

iOS 11 SpriteKit游戏获胜';不要超过每分钟30帧,ios,iphone,swift,xcode,Ios,Iphone,Swift,Xcode,我正在使用Xcode beta更新我的一个iOS 11应用程序。在游戏中加入了一些新功能后,我在测试时注意到,FPS非常低。他们以前没有这么低。我真的不知道该给你们什么密码。这可能是Beta的问题吗?还是我只是在游戏中塞进了很多垃圾 我的游戏只有342MB。这是一个没有3D渲染的2D游戏。我唯一能想到的是我有太多的arc4random同时运行 编辑: 我认为这就是导致问题的代码 func getCollectable() -> SKSpriteNode { var col

我正在使用Xcode beta更新我的一个iOS 11应用程序。在游戏中加入了一些新功能后,我在测试时注意到,FPS非常低。他们以前没有这么低。我真的不知道该给你们什么密码。这可能是Beta的问题吗?还是我只是在游戏中塞进了很多垃圾

我的游戏只有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)
}
func getCollectable()->SKSpriteNode{
var collectable=SKSpriteNode()
如果Int(randomBetweenNumber(firstNum:0,secondNum:9))==4{
//回来
如果GamePlayController.instance.life!<100{
collectable=SKSpriteNode(图像名为:“怪物机器人”)
collectable.name=“怪物”
collectable.physicsBody=SKPhysicsBody(矩形:collectable.size)
collectable.yScale=0.09
collectable.xScale=0.09
}否则{
collectable.name=“空”
}
}否则{
collectable=SKSpriteNode(图像名为:“Coin2”)
collectable.name=“Coin2”
collectable.physicsBody=SKPhysicsBody(矩形:collectable.size)
}
如果Int(randomBetweenNumber(firstNum:0,secondNum:100))==51{
collectable=SKSpriteNode(图像名为:“慢图标”)
collectable.name=“SlowIcon”
collectable.physicsBody=SKPhysicsBody(矩形:collectable.size)
collectable.yScale=0.05
collectable.xScale=0.05
}
可收集。physicsBody?受重力影响=错误
Collectable.physicsBody?.categoryBitMask=ColliderType.DarkCloudAndCollectables
Collectable.physicsBody?.collisionBitMask=CollisterType.Player
collectable.zPosition=2
返回可收集
}
func random介于数字之间(firstNum:CGFloat,secondNum:CGFloat)->CGFloat{
返回CGFloat(arc4random())/CGFloat(UINT32_MAX)*abs(firstNum-secondNum)+min(firstNum,secondNum)
}

这个问题很容易解决。确保代码以正确的顺序运行。在游戏加载时生成新精灵时,需要确保有足够的内存。在添加精灵时删除精灵修复了我的问题

你试过使用Xcode的性能工具来分析它吗?没有看到任何代码,也没有访问项目的权限,任何人都做不到。试着用Xcode分析它。现在就用性能工具吧!更新了我的问题,包括代码你是如何创建随机数的?多久一次?这是每帧都跑吗?