次のシーンに遷移するときにレベルパラメータを渡しますか?
-
21-12-2019 - |
質問
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
. 。さらに初期処理のオーバーライドが必要な場合 onEnter
で GameplayClass
:
-(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"メソッドを追加すると、次のような利点があります。
- その関連CCBIファイルの名前を認識しています。
- 特定のクラスを作成するためのCCBIファイルは、プロジェクト全体で1回だけ参照されます。
- オブジェクトを設定するためのすべてのロジック(例えば、g1gameObjectLayer)はオブジェクト自体の内側にあります。
あなたはあなたのCCSCENEサブクラスと同様のアプローチに従うことができると思います。
所属していません StackOverflow