过去两天我一直在研究我的问题的明确答案,我根本无法在网上找到一个。
我正在使用精灵套件为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,我该如何在代码中执行此操作?
我一直在试验一天没有成功。我希望得到一个回复,其中包含我可以使用的代码段。
答案 0 :(得分:0)
你可以将你的纹理保存在ViewController中作为单例或者作为ViewController的公共属性的NSMutableDictionary,例如
。@interface myViewController : UIViewController
@property NSMutableDictionary *level1Textures;
@property NSMutableDictionary *level2Textures;
@property NSMutableDictionary *level3Textures;
@end
现在您可以使用=
访问每个SKScene中的NSMutableDictionarygameViewController=(UIViewController*)self.view.window.rootViewController
其中gameViewController是UIViewController的一个实例,现在你可以访问level1Textures和level2Textures,因为它们是UIViewController的公共属性