困惑:SKSpriteNode和SKTexture的区别.

Pro*_*mer 8 iphone ipad ios ios7 sprite-kit

我对SKSpriteNode和SKTexture Node感到困惑.我在教程中看到SKSpriteNode可以用来添加像[SKSpriteNode spritenodewithimagename:@"someimag"]这样的图像; 同样的事情发生在SKTexture中[SKTexture texturewithimge/file];

纹理和图像之间有什么区别.如果我们使用SKSpriteNode添加图像,那么使用SKTexture的原因是什么,或者如果我们使用SKTexture和Texture Atlases,那么我们为什么要添加要添加到SKSpriteNode中的图像.

混乱是存在的,两者之间有什么区别.

Lea*_*s2D 34

SKSpriteNode是一个节点,它在给定位置的屏幕上显示(渲染)SKTexture,并具有可选的缩放和拉伸.

SKTexture是一个存储类,包含适合渲染的格式的图像文件,以及纹理仅引用图像/纹理图集的较小部分的框架矩形等附加信息.

分裂两者的一个原因是你通常想要使用相同的SKTexture或相同的SKTextureAtlas绘制多个精灵.这避免了必须在每个精灵的内存中保留相同图像的副本,这很容易变得过高.例如,100 Sprite使用的4 MB纹理仍然使用4 MB内存,而不是400 MB.

更新评论回复:

"质地"一词可以追溯到70年代.

纹理是专门用于渲染的图像的内存表示.常见的图像格式(PNG,JPG,GIF等)不适合图形芯片渲染.纹理是一种"图像格式",图形硬件和渲染器(如OpenGL)可以理解并标准化.

如果将PNG或JPG加载到纹理中,则图像的格式会发生变化.它的颜色深度,alpha通道,方向,内存布局,压缩方法可能会发生变化.可以引入附加数据,例如mip-map级别,其是按比特缩小一定百分比的原始纹理,以便用相同纹理的较低分辨率版本绘制更远的多边形,这减少了混叠并加速了渲染.

这只是表面上的问题.重要的是要记住,没有渲染引擎直接处理图像,它们总是被转换为纹理.这主要与渲染过程的效率有关.

每当你直接在一个API(例如Sprite Kit)中指定图像时,spriteWithImageNamed:内部会发生的事情是渲染器首先检查是否存在具有给定图像名称的现有纹理,如果是,则使用它.如果还没有加载这样的图像,它将加载图像,将其转换为纹理,并将图像名称存储为关键以供将来参考(这称为纹理缓存).