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

标签 swift ios8 sprite-kit

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

目前我有一个函数 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 的新手,但我觉得这个设置过程非常耗费资源,对吧?

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

最佳答案

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

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

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

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

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

重要:

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

希望对您有所帮助。

关于swift - 在 SpriteKit (swift) 中生成多次相同节点的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30412861/

相关文章:

xcode - 使用 contentsOfFile 的 UIImage

访问数组时出现 Swift 编译器错误 - 退出代码 254

swift - 使用 Swift 在字典中添加值

ios - Swift:从 GameViewController 设置 GameScene 变量

ios - SpriteKit,Swift 2.0 - 反向 ScrollView

ios - 从 HKSampleQuery 获取最新的数据点

ios - SwiftUI - 在某些情况下隐藏导航栏

Swift SpriteKit 展开和包装

ios - 多行 UIAlertController 消息

swift - 无法正确隐藏到 UINavigationBar