IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 【Cocos2d-x】 期末复习 -> 正文阅读

[游戏开发]【Cocos2d-x】 期末复习

1. 明确在cocos2d-x程序中输出提示信息的方法,字符串什么类型?

Log ()

字符串类型:C语言字符准类型。

char*类型

* 2. 菜单项有哪些类型,他们之间是什么关系?(会写创建菜单语句)

文本菜单项 MenultemLabel 包含 MenuItemAltasFont 和 MenultemFont

精灵菜单项 MenultemSprite 和图片菜单项 MenultemImage 是两者是父子关系

开关菜单项MenultemToggle,包含两个菜单项一个开一个关

代码未补全

3. 菜单项和菜单有什么而不同,他们之间是什么关系?

请添加图片描述

Menu 和 MenuItem(菜单和菜单项)是不可以单独使用的,需要配合使用。

菜单项是一个选项,而菜单是菜单项的集合。

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 = LabelAtlas: :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_0CC_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)回调函数
log("list->count():%d", this->count());
log("list->count():%d", this->size());
//遍历容器元素:
for(const auto& sp : this->list){
    int x = CCRANDOM_0_1()*vSize.width;
    int y = CCRANDOM_0_1()*vSize.height;
    sp->setPosition(x, y);
    //先删除之前生成的一批,后面添加新的一批
    this->removeChild(sp);
    this->addChild(sp);
}
HelloWorld::~HellWorld(){
    //释放容器中的其他可能的元素,以免占用内存
    this->list->removeA110bjerts();
    //用了retain之后可能造成内存泄漏
	//利用辅助宏安全释放,与new一个新对象后续处理类似
	CC_SAFE_RELEASE_NULL(this->list);
}

* 9. 三种字符串的相互转换的语句

c语言: const char*

C++: std: :string

Cocos2D:__String(具有引用计数机制,继承于Ref)

(1) std::stringconst char*
    
std::string name="Ryoha";
Std::string* namep=new std::string("Ryoha");
const char* cstring = name.c_str() ;
const char* cstring = namep->c_str();
2)__String 转 const char*

__String* name = __String::create("Ryoha");
Log("name=%s", name->getCString()); //在log里面转;
3const char* 转 cocos2d::__String,通过 createWithFormat()
    
const char* cstring = "Ryoha";
__String* ns = __String::createWithFormat("%s",cstring);
4)std::string 转换为 cocos2d::__String
    
std::string name = "Ryoha";
__String* name1 = __String::createWithFormat("%s", name.c_str());

* 10.导演类实例对场景的控制语句

Auto director = Director::getInstance();
director::getInstance()->replaceScene(scene); 

director->runWithScene(scene); // 可以运行场景在启动第一个场景时调用
director->replaceScene(scene); // 切换到下一个场景,当前场景被终端释放

director->pushScene(scene); // 切换到下一个场景,当前场景放入场景堆栈中,原来场景数据保留
director->popScene(scene); // 与pushScene()一起使用,出栈返回上一个场景,不能设置过渡动画

director->popToRootScene(); // 多级场景和 pushScene() 一起用,回到根场景
  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-12-13 13:11:29  更:2021-12-13 13:12:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 20:28:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码