Cocos2dx初体验
作者:互联网
搭建环境
-
在官网下载cocos2dx最新版本。
-
按照官网的说明文档进行各个平台开发软件的下载。
-
下载python2.7版本,并在电脑中添加环境变量。
-
在下载的cocos2dx文件夹下运行python setup.py,如下
- 完成。
体验
创建一个HelloWorld工程
- 在cmd中输入cocos new HelloWorld -p com.helloworld -l cpp -d Delete
-
HelloWorld是项目的名称,-p后面是项目的包名,-l后面是语言版本(cpp就代表的c++),-d后面是指创建项目存放的路径
-
在创建项目存放的路径文件夹下的proj.win32目录下打开HelloWorld.sln文件。
-
打开详情如下
-
编译运行。
创建新场景并实现切换
- 创建一个第二个场景的SecondScence.h头文件,名称任意。
- 创建SecondScence.cpp文件。
- 注意创建的第二个场景的头文件和.cpp文件应放在Classes文件夹中,以实现头文件之间的调用。
- 在第一个场景(初始场景)中把关闭按钮实现的功能改为切换场景。
- 完成。
场景切换特效
-
修改切换场景的代码,如下
-
旧的场景会向下退出,新的场景将会从上至下进入。
-
其他切换特效。
-
使用replaceScene函数进行场景切换会使旧场景被释放以节省内存资源。
-
完成。
推进和弹出场景(马里奥)
-
两种无需释放旧场景的特效。
-
在第二个场景的.h头文件中声明一个popScene函数,在.cpp文件中添加按钮并定义函数popScene函数,此为按钮的回调函数。
-
上述以实现场景来回切换来说明不释放旧场景的功能。
-
完成。
层和对象
-
一个场景有很多不同的层,比如一个层里放角色精灵,另一个层里放地图。
-
创建层的代码如下。
Layer* layer=Layer::create();
-
创建一个aa的头文件和.cpp文件。
//aa继承了Layer,其init函数是重写Layer,所以应先调用父类Layer的init函数做初始化,如果初始化失败就返回false不往下执行了 bool aa::init() { if ( !Layer::init() ) { return false; } //用一张图片创建一个对象 Sprite* sprite = Sprite::create("CloseNormal.png"); //坐标 sprite->setPosition(Point(100, 200)); //将精灵添加到层 this->addChild(sprite); return true; }
-
层与菜单的实现,同第三点,创建一个ceng.h和一个ceng.cpp,如下
-
完成。
节点
- Ref:Cocos2d-x引擎的基类。
- Node:拥有简单功能的类,如缩放,设置坐标,大小,可见,拉伸等,有update函数以及有可以指定程序每一帧都调用一个函数。
- Layer:继承于Node,拥有多种功能的类。
- Cocos2d-x有一套内存管理的方式,想自动处理对象的释放就让类继承Rrf,并使用autorelease函数。
Cocos2d-x 3.0新增-Value,Vector,Map
-
Value拥有大量构造函数,所以使得它可以表示多种数值,如整数,浮点数,字符串,布尔类型等等,如下
bool new::init() { if(!Layer::init()) { return false; } Value a=Value("This is very good?1/0"); Value b=Value(1); log("%s%d",a.asString().c_str(),b.asInt()); //log是打印日志函数,用ac..函数获取信息,如asInt就是获取整型数值 return true; }
-
Vector的功能和队列相似,是对C++的vector容器类的封装,先进先出原则,如下
bool new::init() { if(!Layer::init()) { return false; } Lavel* one=Label::create("Firstman","Arial",20); one->setPosition(Point(200,300)); Lavel* two=Label::create("Secondman","Arial",20); two->setPosition(Point(200,400)); //创建Vector对象 Vector<Label*> vec; //<Label*>表示Vector设置为只能存放Label对象 //将两个Label放入Vector中 vec.pushBack(one); vec.pushBack(two); //遍历Vector取出所有Label添加入场景中 for(auto lab:vec) { this->addChild(lab); } return true; } /* Vector常用函数: eraseObject(object) //从Vector中删除object对象 pushBack(object) //从Vector的最好添加一个object对象 erase(index) //从Vector中删除下标再index处的对象 at(index) //返回Vector某个对象,index为下标值 front() //返回Vector的第一个对象,也就是最先进Vector的对象 size() //返回Vector存放的对象的个数 back() //返回Vector的最后一个对象 clear() //清空Vector */
-
Map的功能是区分和存取大量信息,如下
bool new::init() { if(!Layer::init()) { return false; } //创建Map对象 Map<int,Label*> newmap; //定义此Map用int作为key,用Label*作为value值 //创建50个对象(英雄),并存储到Map中 for(int a=1;a<=50;a++) { //英雄名称 std::string name="No."+Value(a).asString(); //Value(a).asString()是Value的用法,可以在整数,浮点数和字符串之间转换,如Value("123").asInt()输出值是123 //创建Label对象,代表英雄 Label* yx=Label::create(name.c_str(),"Arial",20); //保持英雄到Map中,以a为key,以yx为value newmap.insert(a,yx); } //今天展示No.33号英雄 Label* label=newmap.at(33); label->setPosition(Point(200,300)); this->addChild(label); return true; }
End
基础已有了解,整理勿忘。
~
- 创建一个第二个场景的SecondScence.h头文件,名称任意。
标签:Layer,初体验,return,创建,场景,Cocos2dx,init,Vector 来源: https://blog.csdn.net/weixin_44228006/article/details/104095743