精灵套件纹理表演搞笑

Nic*_*ari 2 ios sprite-kit

好吧,这个让我尖叫到墙上......所以请耐心等待我.

我开始使用Xcode中的SpriteKit模板编写一个简单的游戏.

我将两个PNG添加到一个名为的文件夹中Stage01.atlas并将其拖动到项目中.不记得我选择了哪个选项,因为它在项目导航器中显示为蓝色文件夹图标(可能是因为它有扩展名?).

接下来,我使用了几个sprite来实例化

[[SKSpriteNode alloc] initWithImageNamed:@"My_Image_Name_Without_The_@2x_Or_Extension"];
Run Code Online (Sandbox Code Playgroud)

起初它没有用,因为我忘了在构建设置中启用纹理图集.然后,它就像一个魅力,但......

接下来,我在地图集中添加了第三个PNG来显示一种新的精灵.

新的精灵无处可见.

我尝试全新安装:从设备中删除应用程序,清理,构建.

现在所有精灵都呈现为白色四边形,边框较大,内部有一个大的红色"X".我也得到控制台消息:

SKTexture: Error loading image resource: "My_Image_Name_Without_The_@2x_Or_Extension"
Run Code Online (Sandbox Code Playgroud)

我尝试删除.atlas文件夹并重新添加它,两者都是"为任何添加的文件夹创建组""为任何添加的文件夹创建文件夹引用"(这可能导致资源被放置在子文件夹而不是bundle root中,所以它通常对UIImage等很重要,但无济于事.

我用这个替换了精灵创建代码:

SKTexture* texture = [SKTexture textureWithImageNamed:name];
SKSpriteNode* body = [[SKSpriteNode alloc] initWithTexture:texture];
Run Code Online (Sandbox Code Playgroud)

...并放置一个断点来查看纹理是否正确nil.事实并非如此.

那么,是什么给出的?

旁注:与模板捆绑在一起的"太空飞船"纹理渲染得很好.

旁注2:有人创建标签"spritekit"(SO不允许我使用它'因为它已经存在'但它没有作为建议提出).

Lea*_*s2D 7

要使用纹理图集纹理,首先需要加载纹理图集:

SKTextureAtlas* atlas = [SKTextureAtlas atlasNamed:@"Stage01"];
Run Code Online (Sandbox Code Playgroud)

然后你可以从它的纹理创建精灵:

SKTexture* texture = [atlas textureNamed:@"My_Image_..."];
SKSpriteNode* body = [SKSpriteNode spriteNodeWithTexture:texture];
Run Code Online (Sandbox Code Playgroud)

最初这个工作的事实可能是因为在没有生成.atlas的情况下添加了图像,即使您随后从项目中删除了图像,它们仍将保留在已部署的应用程序包中,因为Xcode不会从应用程序包中删除资源.因此,Sprite Kit最初使用的是非图集图像,而不是它找不到它们,它不会自动在纹理图集中查找它们,也不会自动加载图集.