0

我刚刚将我的项目从 cocos2d 1.0.1 升级到 2.0,经过大量调整后,我无法像以前那样更改 CCLabelTTF 的默认颜色(这样我就避免了一行代码我创建的每个标签)。以前,我是这样做的:

在 CCLabelTTF.m 中:

- (id) initWithString:(NSString*)str dimensions:(CGSize)dimensions alignment:(CCTextAlignment)alignment lineBreakMode:(CCLineBreakMode)lineBreakMode fontName:(NSString*)name fontSize:(CGFloat)size
{
  if( (self=[super init]) ) {

    dimensions_ = CGSizeMake( dimensions.width * CC_CONTENT_SCALE_FACTOR(), dimensions.height * CC_CONTENT_SCALE_FACTOR() );
    alignment_ = alignment;
    fontName_ = [name retain];
    fontSize_ = size * CC_CONTENT_SCALE_FACTOR();
    lineBreakMode_ = lineBreakMode;
    color_ = ccBLACK;

    [self setString:str];
  }
  return self;
}

我正在更改此方法中的颜色,因为每个“initWithString ...”方法都返回这个,但即使我在 cocos2D 2.0 中这样做,它也不起作用。

这是我的新 CCLabelTTF.m :

- (id) initWithString:(NSString*)str dimensions:(CGSize)dimensions hAlignment:(CCTextAlignment)alignment vAlignment:(CCVerticalTextAlignment) vertAlignment lineBreakMode:(CCLineBreakMode)lineBreakMode fontName:(NSString*)name fontSize:(CGFloat)size
{
  if( (self=[super init]) ) {

    // shader program
    self.shaderProgram = [[CCShaderCache sharedShaderCache] programForKey:SHADER_PROGRAM];

    dimensions_ = dimensions;
    hAlignment_ = alignment;
    vAlignment_ = vertAlignment;
    fontName_ = [name retain];
    fontSize_ = size;
    lineBreakMode_ = lineBreakMode;
            color_ = ccBLACK;

    [self setString:str];
  }
  return self;
}

是因为 2.0 之前没有的“ShaderProgram”吗?请帮助我到目前为止已经尝试了一切:(

我什至在我的所有项目中搜索是否有包含“ccWHITE”或“{255,255,255}”的文件,但没有与 CCLabelTTF 相关的文件(CCSprite 除外,但如果我将其更改为 ccBLACK,我的所有精灵都会变黑)

4

1 回答 1

3

不要设置 ivar,而是使用属性的访问器:

self.color = ccBlack;

此外,您不应修改 CCLabelTTF。如果您想改变行为,请创建一个子类。

于 2013-01-18T04:14:55.310 回答