我刚刚将我的项目从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;
}
是不是因为“ShaderProgram”的东西在2.0之前没有?请帮助我到目前为止尝试了一切:(
我甚至搜索了我的所有项目,如果有一个包含“ccWHITE”或“{255,255,255}”的文件但是没有与CCLabelTTF相关的内容(CCSprite除外,但是如果我将其更改为ccBLACK,我所有的精灵都会变黑)
答案 0 :(得分:3)
不使用设置ivar,而是使用属性的访问器:
self.color = ccBlack;
此外,您不应修改CCLabelTTF。如果要更改行为,请创建子类。