我在一个简单但快节奏的SpriteKit游戏中遇到了这个问题,但是我将我的代码简化为一个弹跳球并且仍然在较小程度上解决了问题:
override func didMove(to view: SKView) {
super.didMove(to: view)
physicsWorld.contactDelegate = self
physicsWorld.speed = 1
physicsWorld.gravity = CGVector(dx: 0.0, dy: 0.0)
let borderBody = SKPhysicsBody(edgeLoopFrom: self.frame)
borderBody.friction = 0
self.physicsBody = borderBody
borderBody.contactTestBitMask = BallCategory
addBall()
}
func addBall() {
let size = CGSize(width: 20, height: 20)
let position = CGPoint(x: frame.width / 2, y: 50)
let texture = SKTexture(image: #imageLiteral(resourceName: "whiteCircle"))
let ball = SKSpriteNode(texture: texture, size: size)
ball.position = position
ball.physicsBody = SKPhysicsBody(circleOfRadius: size.width / 2)
ball.fillColor = .white
ball.lineWidth = 0
addStandardProperties(node: ball, name: "ball", z: 5, contactTest: 0, category: BallCategory)
ball.physicsBody?.isDynamic = true
addChild(ball)
launchBall()
}
func addStandardProperties(node: SKNode, name: String, z: CGFloat, contactTest: UInt32, category: UInt32) {
node.name = name
node.zPosition = z
node.physicsBody?.isDynamic = false
node.physicsBody?.affectedByGravity = false
node.physicsBody?.mass = 0
node.physicsBody?.restitution = 1
node.physicsBody?.friction = 0
node.physicsBody?.linearDamping = 0
node.physicsBody?.angularDamping = 0
node.physicsBody?.angularVelocity = 0
node.physicsBody?.contactTestBitMask = contactTest
node.physicsBody?.categoryBitMask = category
}
func launchBall() {
let ball = childNode(withName: "ball")!
ball.physicsBody?.velocity = CGVector(dx: 0, dy: 500)
}
此代码导致球(SKSpriteNode)上下弹跳。当我运行这个时,我的iPhone 6s的CPU使用率开始在10%左右,然后在30-60秒后增加到25-30%左右(不知道为什么会增加)。在所有这些中,帧速率保持非常接近60 FPS,通常不低于58 FPS(当我运行完整游戏时,它的方式相同)。
几乎在任何时候弹出警报(例如,短信,登录游戏中心等),滞后显示并在我正在运行完整游戏时随机出现。
我还尝试删除并重新运行应用,清理项目,删除派生数据以及在发布模式下运行。这些都不是永久性的。
我应该放弃SpriteKit并尝试另一个框架吗?如果是这样,哪个?的Cocos2D?
感谢任何帮助。
答案 0 :(得分:2)
这是Apple优先考虑系统调用的结果。
当系统想要了解某些东西时,检查某些东西或以其他方式做它的事情它是由其他所有东西摆布的。
没有其他引擎可以帮助解决这个问题,没有办法通过代码来消除系统的常量活动。
通过启用飞行模式并关闭WIFI和蓝牙,您可以获得轻微的改善。系统似乎有点意识到它处于更安静的模式并且做得更少,因为它没有4G或其他可以与之通信的连接。
此外,iOS 11中的手机拒绝有一些相当大的变化,这对第一轮iPad Pro模型和创意软件造成了严重破坏,对所有触摸输入产生了多秒拒绝。当这种事情可以通过GM时,你可以非常肯定他们正在通过其他混乱。
以下是有关iOS 11性能的一些投诉:https://www.macrumors.com/2017/09/25/ios-11-app-slowdowns-performance-issues/
答案 1 :(得分:0)