我对SKSpriteNode & SKTexture节点感到困惑。我在教程中看到,SKSpriteNode可以用于添加像SKSpriteNode spritenodewithimagename:@“someimag”这样的图像;在SKTexture中也发生了与SKTexture texturewithimge/file相同的事情;
纹理和图像之间的区别是什么?如果我们使用SKSpriteNode添加图像,那么使用SKTexture的原因是什么,或者如果我们使用SKTexture和纹理亚特兰蒂斯,那么我们为什么要在SKSpriteNode中添加图像。
混乱是存在的,两者之间有什么区别。
发布于 2013-09-28 13:08:17
SKSpriteNode是一个节点,它在给定的位置显示(呈现)屏幕上的SKTexture,并可选择缩放和拉伸。
SKTexture是一个存储类,它包含适合于呈现的格式的图像文件,如果纹理仅引用图像/纹理图谱的较小部分,则附加信息(如框架矩形)。
将两者分开的原因之一是,您通常希望多个精灵使用相同的SKTexture或从同一个SKTextureAtlas绘制。这就避免了为每个精灵保留相同图像的副本,这很容易使人望而却步。例如,100 Sprite使用的4MB纹理仍然使用4 MB内存,而不是400 MB。
更新以回答评论:
术语“纹理”可以追溯到70年代。
纹理是专门用于渲染的图像的内存中表示形式.常见的图像格式(PNG、JPG、GIF等)不要很好地利用图形芯片进行渲染。纹理是图形硬件和渲染器(如OpenGL )理解并标准化的“图像格式”。
如果将PNG或JPG加载到纹理中,则图像的格式会发生变化。它的颜色深度,阿尔法通道,方向,内存布局,压缩方法可能会改变。额外的数据可能会被引入,例如mip-map级别,这是原始纹理缩小了一定百分比,以便以较低的分辨率绘制出更远的多边形,从而减少混叠并加快绘制速度。
不过,这只是表面而已。重要的是要记住,没有渲染引擎可以直接处理图像,它们总是被转换成纹理。这主要与渲染过程的效率有关。
当您在API (如Sprite )中直接指定图像时,例如spriteWithImageNamed:,内部发生的情况是渲染器首先检查是否存在具有给定图像名称的现有纹理,如果存在,则使用该纹理。如果还没有加载这样的图像,它将加载图像,将其转换为纹理,并将其存储为图像名作为将来引用的键(这称为纹理缓存)。
https://stackoverflow.com/questions/19063796
复制相似问题