SpriteKit纹理集
1、SpriteKit纹理集的使用非常简单,只需要将需要打包的图片放到一个文件夹,以.atlas为后缀命名,然后将文件夹拖入Xcode中即可:
项目中还可以设置纹理集的格式还有最大尺寸,这里最大尺寸有2048X2048和4096X4096两个选项,一般4096是移动设备上面OpenGL ES支持的最大尺寸。在代码中使用纹理集也很简单:
SKTextureAtlas *atlas = [SKTextureAtlas atlasNamed:@"monster"];
SKTexture *f1 = [atlas textureNamed:@"monster-walk1.png"];
SKTexture *f2 = [atlas textureNamed:@"monster-walk2.png"];
SKTexture *f3 = [atlas textureNamed:@"monster-walk3.png"];
SKTexture *f4 = [atlas textureNamed:@"monster-walk4.png"];
NSArray *monsterWalkTextures = @[f1,f2,f3,f4];
2、纹理集的工作方式:实际上Xcode在打包的时候会帮你把.atlas文件夹中的所有图片合图,图片的大小会小于等于上图中设置的最大尺寸,如果图片比较多,一个2048X2048(假设设置的最大尺寸是2048X2048)的大图放不下,那么会合成多张大图。与此同时,还会生成一个plist文件描述原来的图片在合图中的位置等信息。Xcode的这种工作方式在苹果的OpenGLES_ProgrammingGuide中有下面的描述:
- Xcode can automatically build texture atlases for you from a collection of images. For details on creating a texture atlas, see Xcode Help. This feature is provided primarily for developers using the Sprite Kit framework, but any app can make use of the texture atlas files it produces. For each .atlas folder in your project, Xcode creates a .atlasc folder in your app bundle, containing one or more compiled atlas images and a property list (.plist) file. The property list file describes the individual images that make up the atlas and their locations within the atlas image—you can use this information to calculate appropriate texture coordinates for use in OpenGL ES drawing.
说的意思是Xcode会创建一个同名的.atlasc文件夹在包内,这个文件夹里面包含了一个或多个合图,外加一个.plist描述文件。苹果直接说这个特性虽然是为SpriteKit开发的,但是你不用SpriteKit也可以使用这个合图,比如说OpenGL ES。
3、直接编译工程,打开bundle文件夹,确实有同名的.atlasc文件夹,下面有合图的jpg文件,还有.plist文件:
.plist文件里面包括各个图片的位置信息,与TexturePacker输出的格式文件非常相似,我们大可以利用这一点在其他地方使用纹理集,不一定非要限制于SpriteKit,只是需要写一些解析的方法就行了。至于说怎么解析,可以参考我之前的文章SpriteKit导入TexturePacker导出的纹理集类似的方式即可。
参考:
https://developer.apple.com/documentation/spritekit/sktextureatlas?language=objc
https://developer.apple.com/library/archive/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/TechniquesForWorkingWithTextureData/TechniquesForWorkingWithTextureData.html#//apple_ref/doc/uid/TP40008793-CH104-SW1