質問

XcodeでSpritebuilderとCocos2Dを使用してシーン間でレベルパラメータを渡す最良の方法を見つけようとしています。

シーン間の遷移には以下の標準コードを使用しています。

[[CCDirector sharedDirector] replaceScene:[CCBReader loadAsScene:@"Gameplay"]];

ご協力をよろしくお願いいたします。

役に立ちましたか?

解決

と仮定すると、 Gameplay.ccb があります GameplayClass カスタム クラスとして割り当てられ、そのクラスには という名前のプロパティがあります。 currentLevel, では、次のようにインスタンスにアクセスしてレベルを割り当てることができます。

CCScene* theScene = [CCBReader loadAsScene:@"Gameplay"];
GameplayClass* game = (GameplayClass*)theScene.children.firstObject;
game.currentLevel = 3;

[[CCDirector sharedDirector] replaceScene:theScene];

時間までに注意してください currentLevel が割り当てられています GameplayClass すでに実行されているでしょう init そして didLoadFromCCB それはその間に起こるため、メソッド loadAsScene. 。さらに初期処理のオーバーライドが必要な場合 onEnterGameplayClass:

-(void) onEnter
{
    [super onEnter]; // must call super

    switch (self.currentLevel)
    {
        // other switches omitted...

        case 3:
            // your level 3 code here
            break;
    }
}

他のヒント

ゲーム(Cocos2D 2.0 + CocosBuilderで作成)GamePlay要素を管理するクラスメソッドloadWithLevelID:levelIDを追加しました。

@implementation GameObjectLayer {
    G1LevelID * _levelID;
}
// load a Luminetic Land game object layer
+ (instancetype)loadWithLevelID:(G1LevelID*)levelID {
    NSString * levelFileName = ... builds levelFileName from levelID;
    GameObjectLayer * gol = (GameObjectLayer*) [CCBReader nodeGraphFromFile:levelFileName];
    [gol setLevelID:levelID];
    return gol;
}
- (void)setLevelID:(G1LevelID*)levelID {
    _levelID = levelID;
}
.

だから今私はGameObjectLayerの入力

を作成することができます
GameObjectLayer * gol = [GameObjectLayer loadWithLevelID:levelID];
.

一般に、CCBIファイルをマッピングするクラスに "Load"メソッドを追加すると、次のような利点があります。

  1. その関連CCBIファイルの名前を認識しています。
  2. 特定のクラスを作成するためのCCBIファイルは、プロジェクト全体で1回だけ参照されます。
  3. オブジェクトを設定するためのすべてのロジック(例えば、g1gameObjectLayer)はオブジェクト自体の内側にあります。
  4. あなたはあなたのCCSCENEサブクラスと同様のアプローチに従うことができると思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top