0

可能重复:
Cocos2D 中的评分系统

我从之前提出的一个问题中得到了答复,但我是编码新手,不知道该怎么做。这是回复:

" @synthesize 一个 int 类型的 "score" 属性和一个 CCLabelTTF 类型的 "scoreLabel" 属性。

在 -(void)init 中将你的 score 属性初始化为“0”

在第 126 行,将“score”属性增加 1,并将该值设置为 CCLabelTTF。"

你能告诉我怎么做吗?请。链接到我的另一篇文章

----- Cocos2D 中的评分系统

4

2 回答 2

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 以便您可以通过单行调用在不同的地方使用它,并进行任何更改,例如在某些情况下分配更多分数,例如两个半秒内的碰撞等..

-(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 回答
1

当您合成一个私有变量(其他类看不到它)时,您允许其他类查看和/或修改该变量的值。

首先,您要创建变量:

NSMutableArray *_targets;
NSMutableArray *_projectiles;

int _score;
CCLabelTTF *_scoreLabel;

然后在您的 init 方法中将其设置_score0

-(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]];是一种将整数转换为_score字符串 ( NSString) 的方法。这是一种旧的 C 方法,这%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 回答