CCLabelAtlas setString不更新标签

时间:2010-03-13 20:58:40

标签: cocos2d-iphone

我有一个CCLabelAtlas,我在一个图层上显示我游戏中的当前分数...我遇到的问题是,当我使用[scoreLabel setString:]时它不会更新。这是我如何制定的:

在标题中:

@interface GameScene : CCLayer {
...

CCLabelAtlas* scoreLabel;
}

在init中:

scoreLabel = [[CCLabelAtlas alloc] initWithString:@"0" charMapFile:@"scoreCharMap.png" itemWidth:6 itemHeight:8 startCharMap:'.'];
[scoreLabel setPosition:ccp(105, 414)];
[self addChild:scoreLabel z: 6];

scoreCharMap.png是一个自定义地图,其中包含我所需字体的./0123456789。当分数改变时,我尝试这样做以使用当前分数更新标签:

NSString* str = [[NSString alloc] initWithFormat:@"%d", [[GameRunner sharedInstance] currentScore]];
[scoreLabel setString: str];
[str release];
[scoreLabel draw];

问题是它永远不会更新 - 它只是坐在那里并显示0.我知道由于断点和调试而调用了setString,并且它应该显示的字符串是正确的 - 但是它只是不更新​​。对值进行硬编码并说[scoreLabel setString:@"1234"]也没有做任何事情。我在这做错了什么?我正在使用Cocos2d 0.99 - 提前感谢!

2 个答案:

答案 0 :(得分:0)

您使用的字体可能有问题吗?尝试使用Cocos2D附带的其中一个字体映射,看看它是否适合您。

答案 1 :(得分:0)

方法 - [CCLabelAtlas setString:]做了一些事情。

您可以验证以下是否正确:(放置一个断点并逐步执行该功能)

  • resizeCapacity无法调整大小
  • updateAtlasvalues检索UTF8字符数组指针。检查那是否是正确的字符串,当你在那里时,用相同的方法检查n,这应该是你的字符串长度

请参阅下面的setString代码:

- (void) setString:(NSString*) newString {
    if( newString.length > textureAtlas_.totalQuads )
        [textureAtlas_ resizeCapacity: newString.length];

    [string_ release];
    string_ = [newString retain];
    [self updateAtlasValues];

    CGSize s;
    s.width = [string_ length] * itemWidth;
    s.height = itemHeight;
    [self setContentSize:s];
}

如果您仍需要任何帮助,请告诉我结果。