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,我所有的精灵变成黑色)
是的我知道,我确定有人会d告诉我,但是真的很难为一个参数创建一个子类吗?对不起,我真的不熟悉编码^^“之间,谢谢你的回答,它解决了它:DI现在认识到这是一个真正的问题... – RaphBlanchet
如果你需要一组不同的默认值,可以修改源代码,但是你更安全一些,为什么呢?因为如果你想更新cocos2d,你必须重做你所有的自定义修改,那么你会在那时记住它们吗?可能不会,除非您使用的是可能(或不可以)将您的更改合并到新版本中的源代码控制 – LearnCocos2D
除了Objective-C之外,您应该更喜欢在类上创建类别而不是子类,除非您需要添加额外的ivars到学校。 – LearnCocos2D