Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift SKPhysicsBody提高CPU使用率_Swift_Sprite Kit - Fatal编程技术网

Swift SKPhysicsBody提高CPU使用率

Swift SKPhysicsBody提高CPU使用率,swift,sprite-kit,Swift,Sprite Kit,我刚刚完成一个基于物理的游戏。我注意到Xcode说能量影响“非常高”,这是有道理的,因为CPU使用率约为21-26%。(我在版本配置中使用的是iPhone 6,而不是模拟器)我找到了问题所在,即每个节点的SKPhysicsBody。当我注释掉物理体的初始化时,cpu使用率下降到4-7%,能量影响显示为“低”。有人能告诉我该怎么做吗 class Item:SKSpriteNode { var id:[Int] init(type: String, ID: [Int]) { self.i

我刚刚完成一个基于物理的游戏。我注意到Xcode说能量影响“非常高”,这是有道理的,因为CPU使用率约为21-26%。(我在版本配置中使用的是iPhone 6,而不是模拟器)我找到了问题所在,即每个节点的SKPhysicsBody。当我注释掉物理体的初始化时,cpu使用率下降到4-7%,能量影响显示为“低”。有人能告诉我该怎么做吗

class Item:SKSpriteNode {

var id:[Int]

init(type: String, ID: [Int]) {
    self.id = ID
    var newTexture = SKTexture(imageNamed: type)
    super.init(texture: newTexture, color: UIColor(), size: newTexture.size())
    self.name = type
    setPhysicsBody()
}

required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") }


func setPhysicsBody() {
    physicsBody = SKPhysicsBody(circleOfRadius: 3)
    physicsBody?.isDynamic = false
    physicsBody?.categoryBitMask = bitMask.obstacleCategory
    physicsBody?.contactTestBitMask = bitMask.ballCategory
    physicsBody?.collisionBitMask = bitMask.ballCategory
    physicsBody?.restitution = 0.05
    physicsBody?.friction = 0.1
}

}

您可以通过设置
SKPhysicsBody
contactTestBitMask
collisionBitMask
来帮助减轻CPU负载。默认情况下,CPU跟踪每个物理体及其与所有其他物理体的关系。通过设置
contactTestBitMask
collisionBitMask
,您可以告诉CPU只关心需要物理体交互的对象。

您可以通过设置
SKPhysicsBody
contactTestBitMask
collisionBitMask
来帮助减轻CPU负载。默认情况下,CPU跟踪每个物理体及其与所有其他物理体的关系。通过设置
contactTestBitMask
collisionBitMask
,您可以告诉CPU只关心需要物理体与之交互的对象。

这几乎是预期的行为。几乎任何利用物理实体的游戏(实际上是每一个游戏)都会对系统征税。回想一下物理学和所有以微秒计算的复杂积分。真的,我认为你在强调一些完全正常的事情。你是否在快速创建可以重用的新节点?否则这是预期的行为,CPU必须每帧计算每个节点的物理量。@Pierce哦,好的,不会生成很多节点,大约5或6个。但你们两人所说的计算是有道理的。感谢you@LeonStorey谢谢,因为只有5或6个节点,25%的CPU使用率似乎有点高。我用100个节点做了一些实验,每个节点都有物理实体,看到了这样的数目,同时它们在屏幕上来回移动,相互影响。但不是5或6。医生的身体有多复杂,你是如何创造它们的?您是否使用字段?这几乎是预期的行为。几乎任何利用物理实体的游戏(实际上是每一个游戏)都会对系统征税。回想一下物理学和所有以微秒计算的复杂积分。真的,我认为你在强调一些完全正常的事情。你是否在快速创建可以重用的新节点?否则这是预期的行为,CPU必须每帧计算每个节点的物理量。@Pierce哦,好的,不会生成很多节点,大约5或6个。但你们两人所说的计算是有道理的。感谢you@LeonStorey谢谢,因为只有5或6个节点,25%的CPU使用率似乎有点高。我用100个节点做了一些实验,每个节点都有物理实体,看到了这样的数目,同时它们在屏幕上来回移动,相互影响。但不是5或6。医生的身体有多复杂,你是如何创造它们的?你在使用字段吗?