雪碧套件纹理行事有趣
好吧,这个让我尖叫到墙上…所以请忍受我。
我开始使用Xcode中的SpriteKit模板编写一个简单的游戏。
我将两个PNG添加到名为Stage01.atlas
的文件夹中,并将Stage01.atlas
拖到项目中。 不记得我select了哪个选项,因为它在项目导航器中显示为蓝色的文件夹图标(可能是因为它有扩展名?)。
接下来,我使用实例化了几个精灵
[[SKSpriteNode alloc] initWithImageNamed:@"My_Image_Name_Without_The_@2x_Or_Extension"];
起初,它不起作用,因为我忘了在构build设置中启用纹理图集。 然后,它像一个魅力,但…
接下来,我添加了第三个PNG到地图集来显示一种新的精灵。
新的精灵无处可见。
我尝试一个干净的安装:从设备上删除应用程序,清理,build立。
现在所有的精灵都呈现为一个白色的四边形,里面有一个边框和一个大的红色“X”。 我也得到了控制台消息:
SKTexture: Error loading image resource: "My_Image_Name_Without_The_@2x_Or_Extension"
我尝试删除.atlas文件夹,并重新添加它作为“为任何添加的文件夹创build组”和“为所有添加的文件夹创build文件夹引用” (这可以导致资源被放置在子文件夹而不是捆绑根目录,所以它通常是UIImage等), 无济于事 。
我用这个replace了精灵创build代码:
SKTexture* texture = [SKTexture textureWithImageNamed:name]; SKSpriteNode* body = [[SKSpriteNode alloc] initWithTexture:texture];
…并放置一个断点,看纹理是否nil
。 事实并非如此 。
那么,是什么给了?
附注:与模板捆绑在一起的“飞船”纹理呈现良好。
附注2:有人创build标签“spritekit”(SO不让我使用它,因为它已经存在了,但它不会作为一个build议)。
要使用纹理图集纹理,您首先需要加载纹理图集:
SKTextureAtlas* atlas = [SKTextureAtlas atlasNamed:@"Stage01"];
然后你可以从纹理中创build精灵:
SKTexture* texture = [atlas textureNamed:@"My_Image_..."]; SKSpriteNode* body = [SKSpriteNode spriteNodeWithTexture:texture];
事实上,最初这个工作可能是因为图像是在没有生成.atlas的情况下添加的,即使您随后从项目中移除了图像,它们仍将保留在已部署的应用程序包中,因为Xcode不会从应用程序包中删除资源。 所以Sprite Kit最初使用的是非阿特拉斯图像,而不是无法find这些图像,它不会自动在纹理图集中查找它们,也不会自动加载图集。