COCOS2d CCLabelTTF未使用玩家得分更新 - 使用CCLayer类

时间:2012-08-07 17:03:23

标签: cocos2d-iphone

我会非常感谢您提供的任何建议,因为我对我遇到的问题越来越感到沮丧 - 我也很欣赏我遇到的问题是由于我缺乏知识/理解。

为了进一步扩展我的知识并伸展自己,我选择创建一个PlayerStats类来处理玩家得分 - 及时,健康等。

我实现了GameLevelLayer和PlayerStats类,如下所示:

GameLevelLayer.m如下:

#import "GameLevelLayer.h"
#import "Player.h"
#import "PlayerStats.h"

@interface GameLevelLayer() {
  CCTMXTiledMap *map;
  Player *player;
  PlayerStats *playerStats;
}

@end

@implementation GameLevelLayer

@synthesize grabber = _grabber;

+(CCScene *) scene
{
    CCScene *scene = [CCScene node];
    GameLevelLayer *layer = [GameLevelLayer node];
    PlayerStats *hudLayer = [PlayerStats node];

   [scene addChild: layer];
   [scene addChild: hudLayer];

return scene;
}

-(id) init {

if( (self=[super init]) ) {

    CGSize screenSize = [[CCDirector sharedDirector] winSize];

    playerStats = [[PlayerStats alloc]init];
    ...........
   }

PlayerStats.m如下:

-(id) init
   {
     if ((self = [super init])) {

     CGSize screenSize = [[CCDirector sharedDirector] winSize];
     score = [CCLabelTTF labelWithString:@"Score : 0" dimensions:CGSizeMake(100,20) hAlignment:UITextAlignmentRight fontName:@"Marker Felt" fontSize:(18.0)];

     int margin = 5;

     score.position = ccp(screenSize.width - (score.contentSize.width/2) - margin, score.contentSize.height/2 + margin);

     [self addChild:score z:99];
   }
     return self;
 }

-(void)numberOfItemsCollected:(int)collected {

    NSString *str = [score string];
    CCLOG(@"What does the label say %@", str);
    // This is actually displaying the correct string of what the score should be .. 

    [score setString:[NSString stringWithFormat:@"Score : %d", collected]];


}

何时(来自GameLevelLayer.m)我发起

 [playerStats numberOfItemsCollected:5];

CCLog显示标签应显示得分:5,但标签本身不会更新。

我非常感谢任何建议,因为我非常清楚我误解了这个问题。 我认为问题在于我正在更新的Layer不是我认为的那个......

提前致谢。

2 个答案:

答案 0 :(得分:0)

我已将CCLabelTTF *分数声明为PlayerStats类标头中的实例变量。与代码相隔一夜之间有多大的不同。

答案 1 :(得分:0)

最后,我设法将此问题集字符串解决为空字符串,然后将其重新设置为字符串

[label setString:@""];
[label setString:yourString];