cocos--类的创建
一旦创建好一个cocos2dx的游戏项目,系统会自动创建好两个类:AppDelegate和HelloWorldScene,并自动生成4对应的文件,分别是AppDelegate.h , HelloWorldScene.h , AppDelegate.cpp 和HelloWorldScene.cpp。
1. 分析AppDelegate类得AppDelegate.cpp文件的代码,如下:
glview->setDesignResolutionSize(480, 320, ResolutionPolicy::EXACT_FIT);
director->setDisplayStats(true);
director->setanimationinterval(1.0 / 60);
auto scene = HelloWorld::createScene();
director->runWithScene(scene);
2. 分析HelloWorldScene类
HelloWorldScene.h:文件代码
#include "cocos2d.h"
USING_NS_CC;
// 自定义层
class HelloWorld : public cocos2d::Layer
{
public:
/*静态的create函数创建Scene场景
* 注意:在Cocos2d-x中没有Cocos2d-iPhone中的“id”,建议返回类实例的指针
*/
static cocos2d::Scene* createScene();
/**
* init函数,完成初始化操作。
* 注意:init函数在Cocos2d-x中返回bool值,而不是返回Cocos2d-iPhone中的“id”
*/
virtual bool init();
/* implement the "static create()" method manually,使用CREATE_FUNC宏创建当前类的对象,返回的对象将会由自动释放池管理内存的释放
*/
CREATE_FUNC(HelloWorld);
};
HelloWorldScene.cpp文件代码
#include "HelloWorldScene.h"
#include "GameScene.h"
Scene* HelloWorld::createScene()
{
// 创建一个场景对象,该对象将会由自动释放池管理内存的释放。'scene' is an autorelease object,
auto scene = Scene::create();
// 创建层对象,该对象将会由自动释放池管理内存的释放,'layer' is an autorelease object
auto layer = HelloWorld::create();
// 将GameSet层作为子节点添加到场景
scene->addChild(layer);
return scene;
}
//调用父类的init方法, on "init" you need to initialize your instance
bool HelloWorld::init()
{
// 1. super init first
if ( !Layer::init() )
{
return false;
}
// 获得设备可见视图大小
Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
。。。
return true;
}
3. 总结出一个普通类的创建核心代码:
头文件(.h)必须包含的代码:
要包含的头文件和命名空间;
class 新类名称(英文名) : public(继承方式)Layer(父类)
{
public:
static Scene* createScene(); //1.场景创建方法
virtual bool init();//2.对象初始化方法,
CREATE_FUNC(新类名); // 3.对象创建宏
};
实现文件(.cpp)必须包含的代码(实现头文件中下面的2个方法):
要包含的头文件和命名空间;
Scene* 新类名称::createScene()
{
auto scene = Scene::create();
auto layer = 新类名::create();
scene->addChild(layer);
return scene;
}
//必须重写init方法,才能对对象创建宏创建出的布景层对象进行初始化
Bool 新类名::init()
{
// 1. super init first
if ( !Layer::init() )
{
return false;
}
中间写出屏幕上的具体内容,布景层中要呈现的精灵、文本标签或其它游戏元素的代码;
return true;
}