0

だから、私はcocos2dで次の動作を実装する方法について少し混乱しています:

ユーザーが「レベル選択」シーンにいると想像してください...ユーザーは開始したい適切なレベルを選択し、タップして開始します。これにより、次のことが開始されます。

[[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:1.0 scene:[Game scene] withColor:ccBLACK]];

---しかし..ユーザーが選択したレベルに関する情報をゲームに提供するにはどうすればよいですか?私はcocosコードを調べていましたが、クラスの引数を使用してカスタムinitメソッドを宣言できるものは何もありません。したがって、この問題を解決する従来の方法が何であるかを知りたいだけです。

明確にするために、私は次のようなものが必要です。

[[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:1.0 scene:[Game scene] performSelector:@selector(initWithLevel) withObject:userLevel withColor:ccBLACK]];

次に、ゲームのinitWithLevelを呼び出します。デフォルトのinitメソッド(+ node呼び出しとして表示されます)の代わりに...これを行う方法はありますか?

4

2 に答える 2

1

ユーザーが選択したレベルを取得する@propertyをGameクラスに追加します。単純な整数だと思います。次に、シーンクラスメソッドを使用してGameクラスを初期化し、プロパティを設定して、トランジションで使用します。

複数の行を1つに詰め込まないようにすることは本当に役立ちます。そうすれば、それらの可能性はあなたの顔に飛びつき始めます:

// initialize your game class
Game* scene = [Game scene];
scene.userSelectedLevel = 10;

// or alternatively:
[scene setUserSelectedLevel:10];

// then transition
CCTransitionScene* transi = [CCTransitionFade transitionWithDuration:1.0 
                                                               scene:scene
                                                           withColor:ccBLACK]
[[CCDirector sharedDirector] replaceScene:transi];

Gameクラスのシーンメソッドを変更して、このパラメーターを入力として受け取ることもできますが、率直に言って、プロパティを使用する方が簡単です。

+(id) sceneWithLevelNumber:(int)levelNumber
{
    // assign level number to Game instance here
}

// call it like this:
[Game sceneWithLevelNumber:10]
于 2012-08-19T14:30:41.030 に答える
0

理想的には、メインクラスの静的/単一インスタンスを1つ使用します...次に、MyGameクラスを作成して、スコア、レベルなどのゲーム固有のデータを維持します。このクラスには、画面のどこからでもアクセスできます。メインメニュー、レベル選択、ゲーム画面。 。

MyGame.hファイル内

@interface MyGame : NSObject
{
    int mLevel;
}
@property(nonatomic,assign) int         level;
+ (MyGame *)sharedGameObject;
@end

MyGame.mファイル内

static MyGame *gGame = nil;

@implementation MyGame
  @synthesize level = mLevel;


+(MyGame*)sharedGameObject
{
    if(!gGame)
    {
        gGame = [[MyGame alloc] init];
    }
    return gGame;
}

@end

//レベル選択画面

[MyGame sharedGameObject].level = 5;//selected level

//ゲーム画面では、

int level = [MyGame sharedGameObject].level ;
于 2012-08-19T11:03:12.117 に答える