0

重複の可能性:
Cocos2Dのスコアリングシステム

以前に尋ねた質問から回答がありましたが、コーディングは初めてで、その方法がわかりません。返信は次のとおりです。

" @synthesizeint型の"score"プロパティ、およびCCLabelTTF型の"scoreLabel"プロパティ。

-(void)initでスコアプロパティを「0」に初期化します

126行目で、「score」プロパティを1つ増やし、その値をCCLabelTTFに設定します。「」

これを行う方法を教えてもらえますか?plz。私の他の投稿へのリンク

----- Cocos2Dのスコアリングシステム

4

2 に答える 2

1

プライベート変数を合成する場合(他のクラスはそれを見ることができません)、他のクラスがその変数の値を見るおよび/または変更する方法を許可します。

まず、変数を作成します。

NSMutableArray *_targets;
NSMutableArray *_projectiles;

int _score;
CCLabelTTF *_scoreLabel;

次に、initメソッドで次のように設定し_scoreます0

-(id) init
{
    if( (self=[super init] )) {
        [self schedule:@selector(update:)];
        _score = 0;

次に、変数をインクリメント(1を加算)し_score、の文字列(テキストコンテンツ)_scoreLabelをその値に設定します。

        if (CGRectIntersectsRect(projectileRect, targetRect)) {
            [targetsToDelete addObject:target];     
            _score++;
            [_scoreLabel setString:[NSString stringWithFormat:@"%d", _score]];                    
        }   

この行は、の整数を文字列( )[_scoreLabel setString:[NSString stringWithFormat:@"%d", _score]];に変換する方法です。これは古いCの方法であり、そこにあるものはすべて、float(小数点付き)ではなく整数として表示される必要があることを意味します。_scoreNSString%d

また、ラベルを「インスタンス化」して、子としてレイヤーに追加する必要があるようです。インスタンス化は、何かのインスタンスを作成するための単なる空想用語です。「クラス」を椅子の青写真と考え、「インスタンス」をその青写真から作成された椅子と考えてください。椅子(インスタンス)を作成したら、それを変更できます(ペイント、脚の追加/削除など)。

したがって、ラベルをインスタンス化してレイヤーに追加するには(それ自体):

-(id) init
{
    if( (self=[super init] )) {
        [self schedule:@selector(update:)];
        _score = 0;

        //Create label
        _scoreLabel = [CCLabelTTF labelWithString:@"0" fontName:@"Marker Felt" fontSize:16];

        //Add it to a layer (itself)
        [self addChild:_scoreLabel];
于 2012-08-16T00:10:20.587 に答える
1

scoreインターフェイス宣言の後にHelloWorldLayer.hにプロパティを作成します。

@property (nonatomic, retain) int score;

次に、行の直後の.mファイルで合成します@implementation HelloWorldLayer

スコアを設定および取得するためのメソッドを作成します。

-(int)getScore {
    return self.score;
}

-(void)setScore:(int)newScore {
    self.score = newScore;
}

このinitメソッドで、プロパティの値をゼロに設定します。

if( (self=[super init] )) {
//... other stuff
[self setScore:0]
}

setScoreメソッドを使用してスコアを更新できますが、setScoreを呼び出す別のメソッドを使用して、1回の呼び出しでさまざまな場所で使用できるようにし、2つのような特定の状況でより多くのスコアを割り当てるなどの変更を加えることをお勧めします。 0.5秒以内の衝突など。

-(void)updateScore:(int)increment {
    int currentScore = [self getScore];
    [self setScore:(currentScore + increment)];
}

同様に、ラベルの場合、

@property (nonatomic, retain) CCLabelTTF scoreLabel; // in header

@synthesize scoreLabel; // in .m file

この場合も、initメソッドで、位置、レイヤー、初期テキストなどを使用してラベルを初期化します。次に、updateScoreメソッドでそのテキストを更新できます。

-(void)updateScore:(int)increment {
    int currentScore = [self getScore];
    [self setScore:(currentScore + increment)];

    [scoreLabel setString:[NSString stringWithFormat:@"Score: %i", [self getScore]]];
}

一般的なタスクに関する混乱を避けるために、先に進む前にチュートリアルを必ずお読みください。

于 2012-08-16T00:18:21.333 に答える