一步一步图文介绍SpriteKit使用TexturePacker导出的纹理集Altas

游戏是一种很耗费资源的应用,特别是在移动设备中的游戏,性能优化是非常重要的

纹理集是将多张小图合成一张大图,使用纹理集有以下优点:
减少内存占用,减少磁盘占用;
减少磁盘读取次数,一次性读取一张大图比多次读取多张小图速度更快
一张大图:打开-读取小图-读取小图-读取小图-关闭;
多张小图:打开-关闭,打开-关闭,打开-关闭,打开-关闭;

SpriteKit在复制节点时留了一个巨坑给开发者,需要开发者手动把复制节点的isPaused设置为false

根据When an overlay node with actions is copied there is currently a SpriteKit bug where the node’s isPaused property might be set to true提示,SpriteKit有一个Bug需要开发者自己来填。
SpriteNode节点在被copy()复制后,会自动被设置为暂停,也就是节点的所有Action全部不可用,如果需要使用node.run(SKAction.run{//code}),得把复制后的节点isPaused设置为false 。

SpirteKit深度复制SKSpriteNode节点及convert转换其它Scene上的节点到当前场景坐标

How to deep copy SKSpriteNode with SKSpritekit and Covert node from other SKScene to Current Coordinate
用spritenode.copy()把其它Scene(CircleScene.sks)里的节点拷贝一份,并把拷贝的这一份节点加到当前的scene(GameScene.sks)里,还有一个重要的注意点,就是如果要在GameScene.sks取得 Overlay内的红色节点的准确坐标,须用convert把copy到fgNode的节点上的红色节点坐标转为GameScene的坐标(let pos = fgNode.convert(sprite.position, from: sprite.parent!))

留意巨坑:得把复制的节点的isPaused设置为false,才可运行节点的所有SKAction