gpt4 book ai didi

ios - Spritekit - 动态添加 child 会降低性能

转载 作者:搜寻专家 更新时间:2023-11-01 06:48:19 25 4
gpt4 key购买 nike

我正在尝试弄清楚如何优化我的游戏。我有很多炮塔等射出物理物体。该游戏可以玩,但可以达到 50 或 45 fps。我发现它与动态添加对象到我的场景有关。

例如。当我的炮塔射击时它运行这段代码

func shootBlaster(){
let blaster = Projectile(color: SKColor.cyanColor(), size: CGSize(width: convertNum(3), height: convertNum(3)))
blaster.name = "blaster"
blaster.physicsBody = SKPhysicsBody(rectangleOfSize: blaster.size)
blaster.physicsBody!.categoryBitMask = CategoryEnemyProjectile
blaster.physicsBody!.contactTestBitMask = CategoryShip | CategoryShipShield
blaster.physicsBody!.collisionBitMask = 0



let fireAction = SKAction.runBlock({
let angle = self.turret.base.zRotation + self.zRotation
let velocity = CGPoint(angle: angle) * convertNum(420)
let vector = CGVectorMake(velocity.x, velocity.y)
let blas = blaster.copy() as Projectile
blas.wpnDmg = 10
blas.position = self.gameScene.gameLayer.convertPoint(self.turret.barrelPos, fromNode: self.turret.base)
self.gameScene.gameLayer.addChild(blas)
blas.physicsBody!.velocity = vector
blas.zRotation = blas.physicsBody!.velocity.angle

blas.runAction(SKAction.removeFromParentAfterDelay(1))
})

let recoilAction = SKAction.moveByX(-5, y: 0, duration: 0.08)
let reverseRecoil = recoilAction.reversedAction()

self.turret.barrel.runAction(SKAction.repeatAction(
SKAction.sequence([
recoilAction,
fireAction,
reverseRecoil
])
,count: self.blasterNum))

}

您可以看到我在每个 fireAction block 中添加了一个“blaster”。我注意到性能更好的游戏很少在运行时添加子项。最好预先加载所有内容。在运行时加载资源会给事情带来压力是有道理的,但有什么选择呢?我是否需要提前将所有内容添加到场景中并以某种方式隐藏和显示它?

最佳答案

在任何类型的射击游戏中,如果您有大量射弹,您都希望利用“合并”。创建一个弹丸池并重复使用它们,而不是在需要时创建新的弹丸。

关于ios - Spritekit - 动态添加 child 会降低性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26832899/

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