cocos2dx3.x | 创建场景的一般步骤

新建一个场景, 头文件导入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不久,若有不对劳烦帮忙指出。

猜你喜欢

转载自blog.csdn.net/u011607490/article/details/81072862
今日推荐