在 SpriteKit 中多次生成同一节点的最佳实践 (swift)

Best practice for spawning many time the same node in SpriteKit (swift)

在我的游戏中,我生成了许多具有随机坐标的敌人,但它们共享相同的内部数据。

目前我有一个函数 SpawnEnemy() 看起来像这样:

func spawnRedPawn(timer: NSTimer) {
    var redPawn = Ship(entityNamed: ESHIP_REDPAWN)
    let action = SKAction.moveToX(0, duration: timer.userInfo as! NSTimeInterval)
    let actionDone = SKAction.removeFromParent()

    redPawn.position = CGPoint(x: self.size.width, y: CGFloat(arc4random_uniform(UInt32(self.size.height - redPawn.size.height))))
    redPawn.setupPhysicsBody(PC.enemy)
    redPawn.setupContactTestBitmask([PC.projectile, PC.player])
    redPawn.addEmitter("propulsionParticle", offset: CGPointMake(redPawn.size.width / 2 + 5, 0))
    redPawn.runAction(SKAction.sequence([action, actionDone]))
    self.addChild(redPawn)
}

PS: 函数格式(由 NSTimer Selector() 调用)可能会改变

我是 SpriteKit 的新手,但我觉得这个设置过程非常耗费资源,对吗?

我的问题是:是不是possible/would只运行这个函数一次,然后只复制创建的敌人更好?

以下是您应该了解的一些基础知识:

您可以做的(尤其是当您遇到性能问题时)是:

  • 使用纹理图集。通过这种方式,您可以减少渲染精灵所需的 cpu 绘制调用次数。

  • 缓存不同的资源,如发射器(或声音)。这样您就可以将它们保存在内存中,而无需从磁盘中读取它们。 搜索 Apple 的 Adventure 游戏,了解如何缓存资源。基本上,您在玩游戏之前使用完成处理程序预加载所有内容。

您可以采取的一种方法是预先创建一堆节点并使用它们直到游戏结束。这样您就不会多次重新创建 SKSpriteNodes(有时会导致明显的延迟)。 你可以阅读相关内容。

重要:

  • 不要考虑模拟器的结果,因为那些是不现实的。如果您对有关性能的真实信息感兴趣,您应该在设备上进行测试。

希望对您有所帮助。