2011-12-15 17 views
0

2つのシーンがあります。シーンAはゲームシーンで、タイプintlevel変数が変更されます。クラスBでは、変数を取得したいと思います。別のクラスの変数を変更するにはどうしたらいいですか? (レベルカウントなど)

私は今何を得ているのですか:

-------------------------------- - LevelDone.m ---------------------------------

HelloWorldLayer *object = [[HelloWorldLayer alloc]init]; 

     int pointsForZeroStars = [[requiredPoints objectAtIndex:0] integerValue]; 
     int pointsForOneStar = [[requiredPoints objectAtIndex:1] integerValue]; 
     int pointsForTwoStars = [[requiredPoints objectAtIndex:2] integerValue]; 
     int pointsForThreeStars = [[requiredPoints objectAtIndex:3] integerValue]; 
     NSLog(@"HEALTH = %d",object.health); 
     CCSprite *levelDoneWindow;   
     if (object.health < pointsForZeroStars){ 
      NSLog(@"should be 0 stars"); 
      levelDoneWindow = [CCSprite spriteWithFile:@"leveldonescreen0stars.png"]; 
     } 

NSLogは、 100あるhealth、実際にそれがゲームのクラスで100

よりも小さい何かのとき、私はLevelDoneシーンを呼び出すためにpushsceneを呼び出す:

----------------------------- HelloWorldLayer.m(ゲーム場面)------------ -------------------------

else{ 

    [[CCDirector sharedDirector] pushScene:[LevelDone node]]; 
    [self generateLevelFromPlist:level]; 


} 

-generateFromPlist方法は100に健康をリセットします。しかし、それは確かにNSLogメソッドの後に呼び出されます私のLevelDone.mクラスでは、それにもかかわらずhealthが100であることが表示されます。

この変数の値を正しく取得するにはどうすればよいですか?

+0

であるかのシーンゲームを通じて「持続しない」だろう'health?'エラーはここに示したコードではなく、HelloWorldLayerクラスにある可能性が高いです。 –

+0

素晴らしい/悪いですね! 'pushScene'メソッドはすべてのセレクタとメソッドを一時停止してはいけませんか?私は1秒の間隔で実行するセレクタを実行している。しかしそれは単に健康を減らすだけです。実際には、次のメソッド '[self generateLevelFromPlist:level];'を100に再設定します。 –

答えて

0

シングルトンを使用してグローバル値を管理します。

http://getsetgames.com/2009/08/30/the-objective-c-singleton/

基本的に、あなたはそのシングルトンクラスのプロパティを作成することができ、そしてそれは関係なく、あなたがどこの値を更新/設定されているなど

+0

すべての権利...ありがとうございます...おそらく良いアプローチです。しかし、私は何をすべきですか?このシングルトンは、私の 'game'クラスからの変化する' health'変数も格納できません。 –

+0

もちろん、そうすることができます。値を100から50に変更すると、もちろんそれをもう一度変更するまで、値は永久に50になります。何もリセットされません。 – Voldemort

+0

はい、とにかく私はゲームのクラスからそれを取得する必要がありますか?だから、それが変わるなら、私のシングルトンクラスでそうするでしょう...それとも、私は何かを誤解しましたか? –

0

HelloWorldLayerのhealthプロパティが実際に正しく更新されていますか?もしそうなら、私は、HelloWorldLayer内で変更している変数がアクセスしているプロパティと同じではないというエラーが、提供されたコード自体に含まれていないと推測します(また、推測します) object.healthと - おそらくスコープの問題がここにあります(セレクタがローカル変数healthには影響しますが、インスタンス変数自体には影響しません)。

+0

レベル変数を設定しようとすると、動作しません。たぶんそれは何度も呼ばれてひどいことをするちょうど恐ろしいサイクルです、私は本当に必死です! –

+0

グローバル変数としてのみ使用されているため、ローカル変数はありません。 –