2014-11-04 83 views
1

我一直在研究過去兩天對我的問題有一個明確的答案,我根本找不到一個在線。Spritekit- SKTextureatlas - 在多個場景中使用預加載的紋理

我正在開發一款使用精靈套件的IOS遊戲,我處於優化階段,但遇到了問題。我想在應用程序啓動時預先加載所有資源,然後在我的應用程序的所有場景和類中使用它們。

我明白這是使用紋理圖集的預加載功能完成的。我創建了一個.atlas文件夾名爲powerUpTex.atlas,這是我所編寫的函數:

首先我添加了一個屬性到TitleScene作爲數組

@interface TitleScene:SKScene

@property(強)NSArray * textureData;

@end

//我把紋理陣列中加載遊戲場景 SKTextureAtlas *圖譜=函數[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

的公共屬性你有沒有想過這個?我正在經歷完全的你。在文檔或任何可以清楚地找到答案的地方都沒有答案。我遇到過的最好的評論是,在App Delegate或VC中加載紋理,並且在那裏保存對它們的引用,將允許你在你的場景中創建SKTextures(比如GameScene),它不需要有時候將圖像移動到內存中,因爲它已經存在於App Delegate(或VC,如果這就是你所做的)。評論不是答案,因爲我無法證實它。如果有人願意,會喜歡它。 – Brad 2016-04-15 21:24:58

回答

0

您可以將您的紋理作爲單例或作爲ViewController的公共屬性的NSMutableDictionary保存在您的ViewController中,例如,

@interface myViewController : UIViewController 

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

@end 

現在你可以通過訪問這些的NSMutableDictionary每SKScene =

gameViewController=(UIViewController*)self.view.window.rootViewController 

其中gameViewController是UIViewController中的一個實例現在可以訪問level1Textures和level2Textures因爲他們的UIViewController

+0

我很抱歉,但此方法無效。我試過你提供的代碼,當我試圖通過鍵入gameViewController訪問屬性。我在視圖控制器中定義的屬性不顯示爲選項。 此外,爲什麼我們不使用地圖集和預加載方法?是不是那些最有效的精靈套件? – jadjoud 2014-11-05 14:19:05

+0

你可以在這裏粘貼你的代碼嗎? – dragoneye 2014-11-08 06:21:03