iOS SpriteKit how to create a node with an image from a folder within app bundle?

ios, ios7, objective-c, skspritenode, sprite-kit

Solution

In that case you can't use the `spriteNodeWithImageNamed:` method. You have to create the texture yourself from an absolute path and initialize your sprite with that texture:

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

Note that doing so you will lose the performance optimizations that come with using `spriteNodeWithImageNamed:` (such as caching and better memory handling)

I recommend putting your images in the main bundle and use a specific naming scheme like this:

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

Alternatively, consider using texture atlases.

Problem

I'm trying to create a sprite of a random monster where my images are stored in a folder referenced within the main bundle. ``` 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]; ``` When I run my code above, I get this error ``` SKTexture: Error loading image resource: "random_monster.png" ``` The code works if I reference the image from the main bundle. How can I use a random image from a folder within the app bundle and pass it to SKSpriteNode?

Original source