Cocos2D得分比赛

时间:2012-08-15 23:12:26

标签: objective-c ios xcode sdk cocos2d-iphone

  

可能重复:
  Scoring System In Cocos2D

我收到了我之前提出的问题的回复,但我不熟悉编码,也不知道如何做。以下是回复:

  

@synthesize类型为int的”score“属性,以及类型为CCLabelTTF的”scoreLabel“属性。

     

在 - (void)init

中将得分属性初始化为“0”      

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

你能告诉我怎么做吗? PLZ。链接到我的其他帖子

----- Scoring System In Cocos2D

2 个答案:

答案 0 :(得分:1)

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

首先,您要创建变量:

NSMutableArray *_targets;
NSMutableArray *_projectiles;

int _score;
CCLabelTTF *_scoreLabel;

然后在您的init方法中将_score设置为0

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

然后将_score变量增加(加1)并将_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];

答案 1 :(得分:1)

在接口声明后在HelloWorldLayer.h中创建一个score属性,如

@property (nonatomic, retain) int score;

然后在@implementation HelloWorldLayer行之后的.m文件中合成它。

创建设置和获取分数的方法:

-(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方法中,使用位置,图层和初始文本等初始化label。然后,您可以在updateScore方法中更新该文本。

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

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

请确保在开始之前仔细阅读tutorial,以避免对常见任务造成混淆。