============================================================
博文原创,转载请声明出处
电子咖啡(原id蓝岩)
============================================================
在 cocos2d 中有三个类可以在层或精灵中添加文字:
CCLabelTTF
CCLabelBMFont
CCLabelAtlas
- CCLabelTTF
CCLabelTTF 每次调用 setString (即改变文字)的时候,一个新的OPENGL 纹理将会被创建.。这意味着setString 和创建一个新的标签一样慢。所以,当你需要频繁的更新它们的时候,尽可能的不用去使用标签对象。 而应该使用CCLabelAtlas或者是CCLabelBMFont。OK, 看下它的使用方法
- CCLabelTTF *label = [CCLabelTTF labelWithString:@"the string" fontName:@"Marker Felt" fontSize:21];
- [layer addChild:label];
- label.position = ccp(100,100);
- [label setString:@“change string”]; //修改文字的方法
- CCLabelBMFont
CCLabelBMFont 相当于每次改变只改变了图片坐标,而CCLabelTTF要重新渲染.这个类使用之前,需要添加好字体文件,包括一个图片文件 (**.png) 和一个 字体坐标文件 (**.fnt),这两个文件名称必须一样,而且不可以同时更改,必须使用相应的文字生成软件生成,google一下有很多免费软件,不过我们一般不需要,网上有很多很好的字体^_^。
- CCLabelBMFont *scoreLabel = [CCLabelBMFont labelWithString:[NSString stringWithFormat:kGAME_SCORE_MODEL,0,kLIFE_INIT] fntFile:@"futura-48.fnt"];
- [self addChild:scoreLabel z:zScoreLablel tag:tScoreLabel];
- scoreLabel.position = ccp(screenWidth/2-20,screenHeight-100);
- CCLabelAtlas
如果你用cocos2d项目模板创建过项目,那么你已经看过它的效果了,就是左下角显示帧率的数字。
因为帧率一直在变,使用CCLabelTTF的话效率太低,因为只是数字所以也犯不上使用 CCLabelBMFont 加载那么大的文字图像,所以使用这个比较合适。
- CCLabelAtlas *label = [CCLabelAtlas labelWithString:@"12" charMapFile:@"fps_images.png" itemWidth:12 itemHeight:18 startCharMap:'.'];
- [layer addChild:label];
- label.position = ccp(100,100);
- [label setString:@“34”];
解释一下参数,labelWithString就是字符,charMapFile 就是字符的图像文件(这个只要图像文件就可以了),itemWidth是每个字符的宽度,itemHeight是每个字符的高度,这个不能设错,否则显示的时候可能就不对了。最后一个是起始字符,它是使用这个其实字符来对应字符和图像关系的。
- 汉字的显示
由于汉字的结构复杂,词汇庞大,综上所属,三种字体中唯一适合显示汉字的只有CCLabelTTF一种。我找到了一个网站提供了详细的IOS字体支持情况,而且各种字体名称也很详细,在调试UI时候很有用,http://iosfonts.com/