1. 明确在cocos2d-x程序中输出提示信息的方法,字符串什么类型?
Log ()
字符串类型:C语言字符准类型。
char*类型
* 2. 菜单项有哪些类型,他们之间是什么关系?
文本菜单项 MenultemLabel 包含 MenuItemAltasFont 和 MenultemFont
精灵菜单项 MenultemSprite 和图片菜单项 MenultemImage 是两者是父子关系
开关菜单项MenultemToggle,包含两个菜单项一个开一个关
bool HelloWorld::init()
{
if ( !Scene::init() )
{
return false;
}
auto visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
//精灵菜单项和开关菜单项
auto onMenuItem = MenuItemImage::create("menu/on.png", "menu/on.png"); //正常状态和选择状态的图片
auto offMenuItem = MenuItemImage::create("menu/off.png", "menu/off.png");
auto toggle = MenuItemToggle::createWithCallback(CC_CALLBACK_1(HelloWorld::menuCloseCallBack, this), onMenuItem, offMenuItem, NULL); //结尾有NULL,很重要
toggle->setPosition(Vec2(visibleSize.width/2,visibleSize.height/2));
//MenuItemFont
MenuItemFont::setFontSize(36);//设置字体大小
MenuItemFont::setFontName("Times New Roman");
MenuItemFont* item1 = MenuItemFont::create("Begin", CC_CALLBACK_1(HelloWorld::menuCloseCallBack, this));
//MenuItemAltas
MenuItemAtlasFont* item2 = MenuItemAtlasFont::create("Class", "menu/tuffy_bold_italic-charmap.png", 18, 66, ' ', CC_CALLBACK_1(HelloWorld::menuCloseCallBack, this));
//MenuItemSprite
auto upMenuItem = MenuItemImage::create("menu/start-up.png", "menu/start-up.png");
auto downMenuItem = MenuItemImage::create("menu/start-down.png", "menu/start-down.png");
MenuItemSprite* menuitemSp = MenuItemSprite::create(upMenuItem, downMenuItem, CC_CALLBACK_1(HelloWorld::menuCloseCallBack, this)); //两个图片菜单项
//生成菜单
auto mn = Menu::create(menuitemSp, NULL);
mn->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 2));
this->addChild(mn);
return true;
}
void HelloWorld::menuCloseCallBack(cocos2d::Ref * pSender)
{
}
* 3. 菜单项和菜单有什么而不同,他们之间是什么关系?(会写创建菜单语句)
Menu 和 MenuItem(菜单和菜单项)是不可以单独使用的,需要配合使用。
菜单项是一个选项,而菜单是菜单项的集合。
语句在问题2
4. 了解Label等文本类及使用语句
(1) LabelTTF基于系统字体
TTF是系统库的意思,它将操作系统里的字体库显示出来。
LabelTTF:第一个参数是“文本/图片”const std::string &string,第二个参数是系统字体库中的字体,第三个是对象大小(前两个参数都是C++语言类型)
auto labelTtf = LabelTTF:: create("This is a LabelTTF","Arial",32);
(2) LabelAltas地图集:
第一个参数是文本,第二个参数资源文件提供文本素材,后面数值为大小auto labelAltas = LabelAltas:: create("LableAltas", "fonts/tuffy_bold_italic-charmap.png",48,66, ' ');
指定一个文件,宽高是固定的,两个字符之间是一个小的空格替换,不能随便改变大小,否则显示的不对。资源字体图集png可以由美工制作。
(3) LabelBMFont位图字体标签:(制作土具: bitmap font generator)
Labe1BMFont是位图字体标签,需要添加字体文件,包括一个图片集(.png)和一个字体坐标文件(. fnt)
第一个参数文本,第二个参数图片集(.png)字体坐标文件(.fnt)
auto labelBnfont = LabelBMFont:: create("LabelBMFont", "fonts/BMFont.fnt");
(4) 新版Label
auto newLabel1 = Label:: createWithSystemFont("New Version Labell", "Arial",36) ; auto newLabel2 = Label:: createWithTTF("New Version Label2","fonts/ MarkerFelt. ttf", 36); auto newLabel3 = Label:: createWithBMFont (" fonts/BMFont. fnt","NewVersionLabel3"); //顺序与旧版相反
*5. 掌握单点触控的lambda表达式
单点触摸事件监听器: EventListenerTouchOneByOne
创建监听器: auto listener = EventListenerTouchOneByOne::create();
单点触摸响应属性:
bool onTouchBegan(Touch touch, Event event);**
void onTouchMoved(Touch touch, Event event);**
void onTouchEnded(Touch touch, Event event);**
给监听器添加事件的三个阶段:
listener->onTouchBegan=CC_CALLBACK 2(HelloWorld::onTouchBegan,this);
listener->onTouchMoved=CC_CALLBACK 2(HelloWold::on TouchMoved,this);
listener->onTouchEnded=CC_CALLBACK_ 2(HelloWorld::on TouchEnded,this);添加事件分发器
*EventDispatcher dispatcher=Director: : getInstance->getEventDispatcher();
dispatcher->addEventListenerWithSceneGraphPriority(listener, this) ;
//Lambda表达式
listener->onTouchBegan =[ this ] (Touch* touch, Event* event) {
*********
return false;
};
//[this]捕获变量列表。Lambda 表达式中要使用外面的变量,捕获变量要放到[]
6. CallFunc和CallFuncN的create函数有什么不同?特别是其中的宏有什么不同?
CallFunc:无参函数调用类
CallluncN:是将自身对象作为参数的函数调用类,传递当前对象
CallFuc和 CallFuncN 的 create的数中的宏不同CC_CALLBACK_0 和CC_CALLBACK_1
auto acf =CallFunc::create(CC_CALLBACK_0(MyAction::CallBack1, this)); //其中的CallBack1函数是无参的。
auto acf =CallFunc::create(CC_CALLBACK_1(MyAction::CallBack2, this)); //其中的CallBack2函数是有参数(Ref* pSender)的。
7. Array和Vector和Map<k,v>容器的类型?他们的内存管理由谁管理?他们本身是继承什么类的?容器类装的是什么类的数据?
数据结构可以分为两大容器:列表(线性)和字典(映射)
列表容器:Array、Vector、ValueVector
字典容器:Dictionary、Map<K,V>(前两个属于Ref类,前者需要管理内存,后者不需要)、ValueMap和ValueMapIntKey
Cocos2D-x中的两大类Ref 和 Value。容器类属于其中之一,并且容器能容纳的内容也分为Ref和 Value。
(1)Array 列表容器,继承于Ref类,容器类装Ref及子类型数据(创建的对象指针)通过引用计数管理内存。
(2)Vector 列表容器,继承于Ref类,这里的T是泛型,表示能放入容器中的类型。在cocos2d-x中表示Ref类,只能放置ref及子类所创建的对象指针,类型的数据。内存管理方面不用 Array 的引用计数,是由编译器自动处理,不用考虑内存释放问题。
(3)Map<K,V> 是字典容器,继承于Ref类,不需要管理内存,容纳Ref类型数据,Key不能重复,Value可以重复。
8.Vector的简单使用,如: 如往容器中添加对象的语句怎么写?
(1)定义:
Vector<Sprite*> list; //Vector不用自己管理内存
(2)容器中添加对象init函数
this->list = Vector<Sprite*>(MAX_COUNT); //容器规模
for(int i = 0; i < MAX_COUNT; i++){
auto sp = Sprite::create("Ball.png");
this->list.pushBack(sp);
}
//添加对象也可以用 void insert(ssize_t index, T object),在指定位置插入元素,ssize_t是int类型别名
(3)回调函数
void HelloWorld::menuGoCallBack(Ref* pSender){
log("list->count():%d", this->count());
log("list->count():%d", this->size(