我不确定我是否做错了,或者是否有“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。
有谁知道发生了什么事?
答案 0 :(得分:1)
字典中的键代表个人的姓名 纹理。每个键的关联对象可以是:
一个NSString对象,包含指向包含纹理的文件的文件系统路径
NSURL对象,包含指向包含纹理的文件的文件系统路径
UIImage对象
NSImage对象
您没有为图像提供路径/网址,您只是使用图片名称而无法确定它们的位置。您可能还需要指定文件扩展名,因为Sprite Kit可能不会尝试猜测它。如果这些是在运行时获取或创建的纹理,它们将不在包中,因此您必须指定每个纹理的路径(通常在appdata或documents文件夹中)。
如果捆绑包中的这些图像 ,则可能必须指定捆绑目录。但是,在这种情况下,在编译时不能使用Xcode创建地图集,然后使用atlasNamed:
。