SpriteKit SKTextureAtlas atlasWithDictionary方法

时间:2014-09-25 00:13:27

标签: ios sprite-kit xcode6

我不确定我是否做错了,或者是否有“atlasWithDictionary”方法出现问题。

这就是我使用它的方式:

NSArray* imageNames = @[ @"image1", @"image2", @"image3", @"image4"];
NSMutableDictionary* tempDict = [NSMutableDictionary dictionary];

for (int i = 0; i < imageNames.count; i++) {
    UIImage* texture = [UIImage imageNamed:imageNames[i]];

    [tempDict setObject:texture forKey:imageNames[i]];
}



SKTextureAtlas* atlasFullOfTextures = [SKTextureAtlas atlasWithDictionary:tempDict];

然后在我的代码中,每当我做

SKTexture* tex = [atlasFullOfTextures textureNamed:@"image1"];

我只是得到一个零对象。我做了一些故障排除,发现

NSArray* arrayOfNames = [atlasFullOfTextures textureNames];

返回一个空数组。

此外,我知道图像正在加载正常,因为我暂时将字典公开并成功从UIImage对象制作了SKTextures。

有谁知道发生了什么事?

1 个答案:

答案 0 :(得分:1)

来自documentation

  

字典中的键代表个人的姓名   纹理。每个键的关联对象可以是:

     
      
  • 一个NSString对象,包含指向包含纹理的文件的文件系统路径

  •   
  • NSURL对象,包含指向包含纹理的文件的文件系统路径

  •   
  • UIImage对象

  •   
  • NSImage对象

  •   

您没有为图像提供路径/网址,您只是使用图片名称而无法确定它们的位置。您可能还需要指定文件扩展名,因为Sprite Kit可能不会尝试猜测它。如果这些是在运行时获取或创建的纹理,它们将不在包中,因此您必须指定每个纹理的路径(通常在appdata或documents文件夹中)。

如果捆绑包中的这些图像 ,则可能必须指定捆绑目录。但是,在这种情况下,在编译时不能使用Xcode创建地图集,然后使用atlasNamed: