雪碧套件纹理行事有趣

好吧,这个让我尖叫到墙上…所以请忍受我。

我开始使用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这些图像,它不会自动在纹理图集中查找它们,也不会自动加载图集。