首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SpriteKit中相同节点多次产卵的最佳实践( spawning )

SpriteKit中相同节点多次产卵的最佳实践( spawning )
EN

Stack Overflow用户
提问于 2015-05-23 12:48:43
回答 1查看 836关注 0票数 1

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

目前,我有一个函数SpawnEnemy(),它如下所示:

代码语言:javascript
复制
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的新手,但我觉得这个设置过程是相当耗费资源的,对吗?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-23 13:28:04

以下是一些你应该知道的基本知识:

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

  • 使用纹理地图集。这样就减少了渲染精灵所需的cpu绘制调用的数量。
  • 缓存不同的资源,如发射器(或声音)。这样,您就可以将它们保存在内存中,而不需要从磁盘读取它们。搜索苹果的冒险游戏,看看如何缓存资源。基本上,您使用完成处理程序在游戏播放之前预加载所有内容。

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

重要信息:

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

希望这能帮点忙。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30412861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档