2013-12-10 13 views
0

我正在構建一個包含數十個動態生成的迷你級別的遊戲。爲了簡化,假設我有三種類型的級別A,B和C,每個級別都可以有一個整數難度。 LevelA,LevelB和LevelC是CCLayer的子類,我一直將它們加載到CCScene的子類GameScene中。我沒有與這種方法結婚;這只是工作。Synchronous CCLayers - 按照複雜的定義順序運行級別

我無法弄清楚的是如何以總體方式控制關卡的流動。

加載新級別的簡單方法似乎是複製[[CCDirector sharedDirector] replaceScene:[newScene node]]模型 - 例如:[[GameScene sharedScene] replaceGameplayLayer:[LevelA newLevelWithDifficulty:5]]]

這工作正常,但只有當下一級的調用進入當前級別的代碼內。所以,如果我在A級的時候,我可以每次我打10分的時間加載了一個相應的B級 - 是這樣的:

-(void)checkScore { 
    if (score >= 10) { 
     [[GameScene sharedScene] replaceGameplayLayer:[LevelB newLevelWithDifficulty:currentLevelDifficulty]]; 
    } 
} 

然後做同樣的水平b類加載了C ^級別或其他配置。

但是如果我想規劃一個級別的訂單呢? A1,B1,C1,C2,C3,C4,C5,A2等?我希望能夠將每個級別作爲一個函數中的同步線。像:

-(void)playGame { 
    [LevelA newLevelWithDifficulty:1]; 
    [LevelB newLevelWithDifficulty:1]; 
    for (int i = 0; i < 5; i++) { 
     [LevelC newLevelWithDifficulty:i]; 
    } 
    // ...etc... 
} 

我不知道如何解決這個問題。它甚至有可能嗎?使CheckScore方法在10點內殺死當前Level很容易,但是如何保持LevelB不會發生,直到它完成?

我希望這個問題有道理。任何幫助你可以提供將不勝感激。

回答

0

您可以在您的場景中創建適當順序的一系列關卡......但提前創建它們將會很昂貴(紋理等)。因此設計一個能夠唯一標識級別和難度的關鍵系統。接下來,你的場景可以註冊一個通知(在NSNotificationCenter和NSNotification上閱讀),每個級別可以通過發佈通知來表示完成。你可以有多個通知,例如levelComplete,gameOver和gameVictory。

當場景得到levelComplete通知,你可以淡出層,查找下一個級別的信息,實例化的類的實例,添加它,並在它消失....

剛一種做這種事的方法。其他可用。

我有層級描述符plists,包含類名稱,播放音樂,勝利和gamover條件等......並使用這樣的方案來排序級別而不交換場景。適用於我。 ymmv :)

+0

謝謝!這看起來好像它會完成這項工作,如果我完全寫出序列。我希望能夠編寫關卡的順序(就像上面的for循環一樣),但如果不可能,我可以沒有它。 – arthurlewis

+0

呀......我爲我的遊戲構建了一個腳本框架,主要是爲了刺激。狗頭人已經內置支持LUA腳本語言,並建立在一些版本的cocos2d ...看這裏http://www.kobold2d.com/display/KKSITE/Home – YvesLeBorg

+0

其實,我試圖實現,並實現編寫序列不是一種選擇,因爲在某些情況下,需要動態生成級別順序。 這就是說,你是什麼意思的「創建一個適當的序列級數組」?這些級別足夠快,他們將共享幾乎所有相同的資產,所以我不擔心加載太多紋理。我可以動態地填充該數組,但我不確定它實際上包含了什麼。選擇? – arthurlewis

相關問題