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

 学海无涯 发布于 2023-02-13 17:06

我正在尝试创建一个随机怪物的精灵,我的图像存储在主束中引用的文件夹中.

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];

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

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

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

1 个回答
  • 在这种情况下,您无法使用该spriteNodeWithImageNamed:方法.您必须自己从绝对路径创建纹理并使用该纹理初始化您的精灵:

    NSImage *image = [[NSImage alloc] initWithContentsOfFile:absolutePath];
    SKTexture *texture = [SKTexture textureWithImage:image];
    SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithTexture:texture];
    

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

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

    monster_001.png
    monster_002.png
    monster_003.png
    etc...
    

    或者,考虑使用纹理图集.

    2023-02-13 17:08 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有