Spritekit- SKTextureatlas - 在多个场景中使用预加载的纹理

时间:2014-11-04 22:49:54

标签: ios objective-c

过去两天我一直在研究我的问题的明确答案,我根本无法在网上找到一个。

我正在使用精灵套件为IOS开发游戏,我正处于优化阶段,但我遇到了问题。我想在应用程序启动时预加载所有资源,然后在我的应用程序中的所有场景和类中使用它们。

据我所知,这是使用纹理图集的预加载功能完成的。我创建了一个名为powerUpTex.atlas的.atlas文件夹,这是我写的函数:

首先,我将一个属性作为数组添加到TitleScene

@interface TitleScene:SKScene

@property(strong)NSArray * textureData;

@end

//我将纹理放在加载游戏场景的函数中的数组中 SKTextureAtlas * atlas = [SKTextureAtlas atlasNamed:@" powerUpTex"];

    SKTexture *powerUp1 = [atlas textureNamed: powerUp1ImageName];
    SKTexture *powerUp2  = [atlas textureNamed: powerUp2ImageName];
    SKTexture *powerUp3 = [atlas textureNamed: powerUp3ImageName];

    textureData = [[NSArray alloc] init];
    textureData= @[powerUp1,powerUp2,powerUp3];

    [SKTexture preloadTextures:textureData withCompletionHandler:^{
         NSLog(@"textures loaded");
         //Load the GameScene
    }

我的应用程序包含以下类: 1.App代表

2.ViewController

3.TitleScene

4.GameScene

5.HelperClass1(由游戏场景调用并使用预加载的纹理返回SKSprite节点)

6.HelperClass2(由游戏场景调用并使用预加载的纹理返回SKSprite节点)

7.GameOverScene

好的,所以我的问题是:

首先,我应该在哪里放置这个功能(如在什么类中)。在应用程序委托?查看控制器?标题场景?

其次,更重要的是,纹理预装到哪里,我可以在任何场景或类中从应用程序中访问它们!例如,如果我想在HelperClass2中使用powerUp1纹理来初始化skspritenode,我该如何在代码中执行此操作?

我一直在试验一天没有成功。我希望得到一个回复​​,其中包含我可以使用的代码段。

1 个答案:

答案 0 :(得分:0)

你可以将你的纹理保存在ViewController中作为单例或者作为ViewController的公共属性的NSMutableDictionary,例如

@interface myViewController : UIViewController

@property NSMutableDictionary *level1Textures;
@property NSMutableDictionary *level2Textures;
@property NSMutableDictionary *level3Textures;

@end

现在您可以使用=

访问每个SKScene中的NSMutableDictionary
gameViewController=(UIViewController*)self.view.window.rootViewController

其中gameViewController是UIViewController的一个实例,现在你可以访问level1Textures和level2Textures,因为它们是UIViewController的公共属性