cocos2d-x核心概念(二)——字符串,标签和菜单

来源:互联网 发布:打印机合格证的软件 编辑:程序博客网 时间:2024/04/30 07:44

cocos2dx-x核心概念(二)————字符串,标签和菜单

一,cocos2d-x中的字符串

在cocos2d-x中可用的字符串有三种:const char * 和 std::string 和 cocos2d::_String,其中,const char * 是C语言风格的字符串,std::string是C++风格的字符串,它封装了const char * ,cocos2d::_String才是Cocos2d-x提供的字符串类。

(一)使用const char * 和 std::string 

std::string 是一个类,具有面对对象的有点,不需要使用指针,不需要关心内存释放问题,在作用域超出之后,std::string 对象被释放。而const char * 没有这些特性。

std::string name = "oscar";std::string name = std::string("oscar");
可以通过以下语句把std::string转化为const char * 类型
const char * cstring = name.c_str()
可以使用 std::string 指针类型,但要配合使用new 关键字开辟内存空间,然后不使用时要用delete释放内存
std::string * name = new std::string("oscar");...delete name;
使用指针时,可以用下面代码转换为const char* 类型

const char * cstring = name->c_str();
(二)使用 cocos2d::_String

cocos2d::_String 基于Unicode双字节编码,创建它的静态函数create如下

(1)static _String * create(const std::string & str);

(2)static _String * createWithFormat(const char * format,...);

代码实例如下:

_String* name = _String::create("Hi,Oscar");
int num = 123;_String * ns = _String:: createWithFormat("%d",num);
cocos2d::_String 转换为 const char*

_String * name = _String::create("Hi,Ocar");
const char * cstring = name->getCString();

const char* 转换为 cocos2d::_String

const char * cstring = "Hi,Oscar";
_String * ns = _String::createWithFormat("%s",cstring);

std::string 转换为 cocos2d::_String 

std::string string = "Hi,oscar";
_String *ns = _String::createWithFormat("%s",string.c_str());

cocos2d::_String 转换为 int 类型

int num =123;
_String *ns = _String::createWithFormat("%d",num);
int num2 = ns->intValue();

二,使用标签

cocos2dx中的标签类有四种:LabelTTF,LabelAtlas和LabelBMFont,Label。

(一)LabelTTF使用系统类字体,最简单的标签:

auto label = LabelTTF::create("Hello World","Arial",64);
第一个参数是要显示的字,第二个参数是系统字体名,第三个参数是字体的大小。

(二)LabelAtlas是图片集标签,文字是从一个图片集中取出的,需要加载图片集文件,比LabelTTF快很多:

auto label = LabelAtlas::create("Hello World","fonts/fonts.png",48,66,' ');

第一个参数是要显示的字,第二个参数是图片集文件路径(需放在Resources文件夹下),第三个参数是字体的高度,第四个参数是字体的宽度,第五个参数是开始字符。

(三)LabelBMFont是位图字体标签,需要添加字体文件,包括一个图片集(.png)和一个字符坐标文件(.fnt),每个字符的宽度都是可变的。

auto label = LabelBMFont::create("Hello World","fonts/BMFont.fnt");
第一个参数是要显示的字,第二个参数是图片集文件路径(需放在Resources文件夹下)

(四)Label

cocos2d-x 3.x推出了新的标签类Label,它使用FreeType,渲染速度更快,提供了描边和阴影等特性。

(1)创建系统字体标签对象

static Label* createWithSystemFont(const std::string & text,

const std::string & font,

float fontSize,

const Size & dimensions = Size::ZERO,

TextHAlignment hAlignment = TextHAlignment::LEFT,

TextVAlignment vAlignment = TextVAlignment::TOP 
)


参数
text最始文本内容。font一个字体文件或字体名称。fontSize字体大小。这个值必须大于0。dimensions文本的内容大小。hAlignment水平对齐方式。vAlignment垂直对齐方式。
实例:auto Label1 = Label::createWithSystemFont("Hello World1","Arial",36);


(2)创建TTF字体标签对象


static Label* createWithTTF(const TTFConfig & ttfConfig,

const std::string & text,

TextHAlignment hAlignment = TextHAlignment::LEFT,

int maxLineWidth = 0 
)

参数
ttfConfig一个TTFConfig对象实例。text最初文本内容。hAlignment水平对齐方式maxLineWidth最大线宽

实例:auto Label2 = Label::createWithTTF("Hello World2","fonts/fonts.ttf",36);


(3)创建位图字体标签对象

static Label* createWithBMFont(const std::string & bmfontPath,

const std::string & text,

const TextHAlignment & hAlignment = TextHAlignment::LEFT,

int maxLineWidth = 0,

const Vec2 & imageOffset = Vec2::ZERO 
)

参数
bmfontPath一个位图字体文件,它是FNT格式。text初始文本内容。hAlignment水平对齐方式。maxLineWidth最大线宽imageOffsetThe first character offset in BMfont 第一个字符的在位图文件中的偏移
实例:auto Label3 = Label::createWithBMFont("fonts/fonts.fnt","Hello World3");




(五)把.cpp文件另存为utf-8(无签名)可解决中文乱码问题

三,使用菜单
菜单中包含菜单项(MenuItem),MenuItem的子类有MenuItemLabel,MenuItemSprite和MenuItemToggle。
(一)文本菜单MenuItemLabel
MenuItem是抽象类,具体使用时有两个子类:MenuItemFont 和 MenuItemAtlasFont
(1)MenuItemFont 
static MenuItemFont* create(const std::string & text,

const ccMenuCallback & callback 
)

static

基于给定的字符串,字体配置及回调创建菜单项。

参数
text要显示的文本。callback菜单项被激活时调用的回调。
返回
一个初始化的MenuItemFont菜单项,该节点会自动被标记为“autorelease”(自动释放).

(2)MenuItemAtlasFont
static MenuItemAtlasFont* create(const std::string & text,

const std::string & charMapFilePath,

int itemWidth,

int itemHeight,

char startingCharacter,

const ccMenuCallback & callback 
)

static

使用给定的字符串、字符集配置及回调创建菜单项。

参数
text要显示的文本。charMapFilePath字符集字体的文件路径。itemWidth字符的宽度。itemHeight字符的高度。startingCharacter起始字符。callback菜单项被激活时调用的回调。
返回
一个初始化的文本菜单项,该节点会自动被标记为“autorelease”(自动释放).

(二)精灵菜单和图片菜单:MenuItemSprite,图片菜单MenuItemImage继承于精灵菜单。
static MenuItemSprite* create(Node * normalNode,

Node * selectedNode,

Node * disabledNode,

const ccMenuCallback & callback 
)

static

基于给定的不同状态下显示的节点及回调创建菜单项。

参数
normalNode正常状态显示的节点。selectedNode选中状态显示的节点。disabledNode禁用状态显示的节点。callback菜单项被激活时调用的回调。
返回
一个初始化的MenuItemSprite菜单项,该节点会自动被标记为“autorelease”(自动释放).


static MenuItemImage* create(const std::string & normalImage,

const std::string & selectedImage,

const std::string & disabledImage,

const ccMenuCallback & callback 
)

static

基于给定的不同状态下的图片资源及回调创建菜单项。

参数
normalImage正常状态显示的图片路径。selectedImage选中状态显示的图片路径。disabledImage禁用状态显示的图片路径。callback菜单项被激活时调用的回调。
返回
一个初始化的图片菜单项,该节点会自动被标记为“autorelease”(自动释放).
(三)MenuItemToggle开关菜单
static MenuItemToggle* 
createWithCallback
(const ccMenuCallback & callback,

const Vector< MenuItem * > & menuItems 
)

static

基于给定的回调及菜单项数组创建菜单项触发器。

参数
callback菜单项被激活时调用的回调。menuItems菜单项数组。
返回
一个初始化的触发器菜单项,该节点会自动被标记为“autorelease”(自动释放).
0 0
原创粉丝点击