2013-01-18 63 views
0

我刚刚将我的项目从cocos2d 1.0.1升级到2.0,经过很多调整和所有操作后,我无法像以前那样更改CCLabelTTF的默认颜色(这样我就避免了我创建的每个标签的一行代码)。之前,我在做这样的: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,我所有的精灵变成黑色)

回答

3

而不是设置伊娃的,使用访问器的属性:

self.color = ccBlack; 

而且,你不应该修改CCLabelTTF如果你想改变自己的行为。 ,做一个子类

+0

是的我知道,我确定有人会d告诉我,但是真的很难为一个参数创建一个子类吗?对不起,我真的不熟悉编码^^“之间,谢谢你的回答,它解决了它:DI现在认识到这是一个真正的问题... – RaphBlanchet

+1

如果你需要一组不同的默认值,可以修改源代码,但是你更安全一些,为什么呢?因为如果你想更新cocos2d,你必须重做你所有的自定义修改,那么你会在那时记住它们吗?可能不会,除非您使用的是可能(或不可以)将您的更改合并到新版本中的源代码控制 – LearnCocos2D

+0

除了Objective-C之外,您应该更喜欢在类上创建类别而不是子类,除非您需要添加额外的ivars到学校。 – LearnCocos2D