Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS SpriteKit如何从应用程序包中的文件夹创建具有图像的节点?_Ios_Objective C_Ios7_Sprite Kit_Skspritenode - Fatal编程技术网

iOS SpriteKit如何从应用程序包中的文件夹创建具有图像的节点?

iOS SpriteKit如何从应用程序包中的文件夹创建具有图像的节点?,ios,objective-c,ios7,sprite-kit,skspritenode,Ios,Objective C,Ios7,Sprite Kit,Skspritenode,我正在尝试创建一个随机怪物的精灵,其中我的图像存储在主捆绑包中引用的文件夹中 NSString* bundlePath = [[NSBundle mainBundle] bundlePath]; NSString* resourceFolderPath = [NSString stringWithFormat:@"%@/monsters", bundlePath]; NSArray* resourceFiles = [[NSFileManager defaultManager] content

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

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?

在这种情况下,您不能使用
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...

可选地,考虑使用.

实际上[SksReleNoDeSpReNeNoDeIVIMANMED:]使用绝对路径为我工作,至少在OSX 10.9上。我正在进行一个项目,在这个项目中,我需要访问应用程序包之外的资源,而它不需要SKTexture或NSImage就可以完成这项工作

试试看:D

NSString *imagePath = @"~/Desktop/test.png";
SKSpriteNode *test = [SKSpriteNode spriteNodeWithImageNamed:[imagePath stringByExpandingTildeInPath]];

是的,我刚刚发现了如何使用纹理地图集来实现这一点:SpritoDeWithimageNamed上是否有任何源可以准确地解释它正在做的其他事情?