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

时间:2015-05-23 12:48:43

标签: 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的新手,但我觉得这个设置过程非常耗费资源吗?

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

1 个答案:

答案 0 :(得分:3)

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

您可以做的事情(特别是遇到性能问题时)是:

  • 使用纹理地图集。这样就减少了渲染精灵所需的cpu绘制调用次数。

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

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

重要的:

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

希望这有点帮助。