iOS SpriteKit如何使用app bundle中的文件夹创建一个带有图像的节点?

前端之家收集整理的这篇文章主要介绍了iOS SpriteKit如何使用app bundle中的文件夹创建一个带有图像的节点?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试创建一个随机怪物的精灵,我的图像存储在主束中引用的文件夹中. @H_301_2@NSString* bundlePath = [[NSBundle mainBundle] bundlePath]; NSString* resourceFolderPath = [NSString stringWithFormat:@"%@/monsters",bundlePath]; NSArray* resourceFiles = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:resourceFolderPath error:nil]; NSInteger randomFileIndex = arc4random() % [resourceFiles count]; NSString* randomFile = [resourceFiles objectAtIndex:randomFileIndex]; SKSpriteNode* tile = [SKSpriteNode spriteNodeWithImageNamed:randomFile];

当我运行上面的代码时,我收到此错误

@H_301_2@SKTexture: Error loading image resource: "random_monster.png"

如果我从主包中引用图像,则代码有效.如何使用应用程序包中的文件夹中的随机图像并将其传递给SKSpriteNode?

解决方法

在这种情况下,您不能使用spriteNodeWithImageNamed:方法.您必须自己从绝对路径创建纹理并使用该纹理初始化您的精灵: @H_301_2@NSImage *image = [[NSImage alloc] initWithContentsOfFile:absolutePath]; SKTexture *texture = [SKTexture textureWithImage:image]; SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithTexture:texture];

请注意,这样做会丢失使用spriteNodeWithImageNamed所带来的性能优化:(例如缓存和更好的内存处理)

我建议将您的图像放在主包中,并使用如下的特定命名方案:

@H_301_2@monster_001.png monster_002.png monster_003.png etc...

或者,考虑使用texture atlases.

猜你在找的iOS相关文章