gpt4 book ai didi

swift - 快节奏的 SpriteKit 游戏具有不规则的 CPU 事件,并且尽管帧速率保持在高水平,但仍会出现抖动/滞后 - Swift

转载 作者:搜寻专家 更新时间:2023-10-31 22:40:44 24 4
gpt4 key购买 nike

我在一个简单但快节奏的 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(当我运行完整游戏时也是如此)。

几乎每次弹出警报(例如,短信、登录 Game Center 等)时,都会出现延迟,并且在我运行完整游戏时会随机出现。

我还尝试删除并重新运行应用程序、清理项目、删除派生数据并在 Release模式下运行。这些都不是永久有效的。

我应该放弃 SpriteKit 并尝试另一个框架吗?如果是这样,哪个? Cocos2D?

感谢任何帮助。

enter image description here

最佳答案

这是 Apple 将系统调用的优先级置于几乎所有其他方面的结果。

当系统想要知道某事、检查某事或以其他方式做它的事情时,它会受到其他一切的支配。

没有其他引擎能够帮助解决这个问题,没有办法通过代码使系统的持续事件静音。

您可以通过开启飞行模式并关闭 WIFI 和蓝牙来获得轻微的改善。该系统似乎有点意识到它处于更安静的模式并且做的更少,因为它没有 4G 或其他可以与之通信的连接。

此外,iOS 11 中的防手掌误触功能发生了一些相当大的变化,这对第一轮 iPad Pro 型号和创意软件造成了严重破坏,造成了对所有触摸输入的多秒拒绝。当这种事情可以通过 GM 处理时,您可以非常确定他们正在避开其他困惑情况。

以下是关于 iOS 11 性能的一些投诉:https://www.macrumors.com/2017/09/25/ios-11-app-slowdowns-performance-issues/

关于swift - 快节奏的 SpriteKit 游戏具有不规则的 CPU 事件,并且尽管帧速率保持在高水平,但仍会出现抖动/滞后 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47299191/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com