新建一个场景, 头文件导入cocos2d.h、ui\CocosGUI.h等,声明命名空间USING_NS_CC, 声明成员变量(例如:ui按钮、精灵等)和函数声明(例如:构造函数、析构函数、用于初始化的init()方法、cocos2d提供的宏方法CREATE_FUNC()、更新函数update(float dt)等), cpp文件里对其进行初始化和定义。
例如:
MyScene.h
#ifndef _MYSCENE_H_
#define _MYSCENE_H_
#include "cocos2d.h"//最重要的包。
#include "ui\CocosGUI.h"//ui相关。
USING_NS_CC;//最重要的命名空间。
class MyScene : public Layer
{//继承Layer,用于构建组成MyScene的图层。
public:
MyScene();
~MyScene();
virtual bool init();//成员变量初始化方法。
void update(float dt);//用于对成员变量进行操控的方法。
CREATE_FUNC(MyScene);//使用宏方法构建场景。
static Scene* createScene();//定义用于方便全局使用的构建场景方法。
private:
Sprite* mySprite;//组成场景的精灵,这里定义为私有成员方便update()方法对其调用。
};
#endif
MyScene.cpp
#include "MyScene.h"
MyScene::MyScene():
mySprite(nullptr)//在构造场景时,初始化指针。
{
}
MyScene::~MyScene()
{
this->unscheduleUpdate();//在撤销场景时,销毁定时器。
}
bool MyScene::init()
{//场景的初始化方法。注意是布尔类型、虚函数。
Layer::init();//先执行父类初始化。
auto visibleSize = Director::getInstance()->getVisibleSize();//获取可见区域大小。
mySprite = Sprite::create("MySprite.png");//初始化精灵。
mySprite->setPosition(visibleSize.width / 2, visibleSize.height / 2);//初始化精灵位置为可见区域中央。
addChild(mySprite, 1);//将精灵添加到当前图层。参数1表示深度,越深的层越在下面,默认是0,背景的深度一般为0。也可以写成this->addChild(mySprite, 1);
auto exitBtn = ui::Button::create("ExitBtn.png");//初始化按钮。
exitBtn->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 2));//初始化按钮位置为可见区域中央。
addChild(exitBtn, 1);//将按钮添加至当前图层。
exitBtn->addClickEventListener(
[](Ref* ref)
{//Lambda表达式
Director::getInstance()->end();//获取实例,退出程序,释放内存。
}
);//给按钮添加一个点击事件。
scheduleUpdate();//注册一个默认定时器。它会每帧调用一次update()方法。
return true;//初始化成功返回true。
}
void MyScene::update(float dt)
{//更新函数。
mySprite->setPositionX(mySprite->getPositionX() - 10);//使精灵沿X轴负方向移动,速度为每帧10个像素单位。
}
Scene * MyScene::createScene()
{//创建该场景,并将其返回。
auto scene = Scene::create();//创建一个场景。
auto layer = MyScene::create();//创建一个MyScene图层。这里注意不要写成 auto layer = Layer::create();
scene->addChild(layer);//把图层添加到场景里。
return scene;//返回制作好的场景。
}
学习cocos2d-x不久,若有不对劳烦帮忙指出。