设为首页 加入收藏

TOP

仿《雷霆战机》飞行射击手游开发--新手引导(二)
2017-10-13 10:14:57 】 浏览:3249
Tags:《雷霆战机》 飞行 射击 开发 新手 引导
de类,用于实现各种引导。

下面我们逐个分析这些类。

半透明层

class PopupLayer : public LayerColor
{
public:
	PopupLayer();
	~PopupLayer();

	virtual bool init();
	virtual bool doInit() = 0;

	//touch事件监听 屏蔽向下触摸
	virtual bool onTouchBegan(Touch *touch, Event *event) override;
	virtual void onTouchMoved(Touch *touch, Event *event) override;
	virtual void onTouchEnded(Touch* touch, Event* event) override;

	virtual std::function<bool(Touch*, Event*)> getTouchBeganFunc() { return CC_CALLBACK_2(PopupLayer::onTouchBegan, this); };
	virtual std::function<void(Touch*, Event*)> getTouchMovedFunc() { return CC_CALLBACK_2(PopupLayer::onTouchMoved, this); }
	virtual std::function<void(Touch*, Event*)> getTouchEndedFunc() { return CC_CALLBACK_2(PopupLayer::onTouchEnded, this); }

protected:
	EventListenerTouchOneByOne* m_pListener;
};
PopupLayer::PopupLayer()
	: m_pListener(nullptr)
{
}

PopupLayer::~PopupLayer()
{
	Director::getInstance()->getEventDispatcher()->removeEventListener(m_pListener);
}

bool PopupLayer::init()
{
	if (!LayerColor::init())
	{
		return false;
	}

	m_pListener = EventListenerTouchOneByOne::create();
	m_pListener->setSwallowTouches(true);
	m_pListener->onTouchBegan = getTouchBeganFunc();
	m_pListener->onTouchMoved = getTouchMovedFunc();
	m_pListener->onTouchEnded = getTouchEndedFunc();
	auto dispatcher = Director::getInstance()->getEventDispatcher();
	dispatcher->addEventListenerWithSceneGraphPriority(m_pListener, this);

	setColor(Color3B(0, 0, 0));
	setOpacity(160);

	return doInit();
}

bool PopupLayer::onTouchBegan(Touch *touch, Event *event)
{
	return true;
}

void PopupLayer::onTouchMoved(Touch *touch, Event *event)
{

}

void PopupLayer::onTouchEnded(Touch* touch, Event* event)
{

}

上面这段代码中,通过继承LayerColor,并使用setColor(Color3B(0, 0, 0)); setOpacity(160);来实现一个半透明层的遮盖,而具体的界面初始化和触摸响应,则由子类来重写doInit/onTouchBegan/ onTouchMoved/ onTouchEnded来实现。

新手引导基类

先上代码

 

#define DECLARE_GUIDE(name)\
private:\
	static bool mInit; \
	static int mType; \
public:\
	static Guide* create()\
	{\
		return new name(); \
	}\
	static bool checkCondition();

#define REGISTER_GUIDE(type, name) \
	bool name::mInit = GuideMgr::getInstance()->registerFunc(type, name::checkCondition, name::create); \
	int name::mType = type;

class Guide : public PopupLayer
{
public:
	Guide();

public:
	//显示
	Guide* show(int GuideType, Node* pRoot, Node* pTarget, const std::function<void()>& callback = nullptr);
	//还原target
	void restore();

	//设置文字描述
	void setPrompt(const std::string& prompt);

	//设置玩家触摸屏幕任意一点后的响应,例如:销毁当前的引导并弹出新的引导
	virtual void onTouchEnded(Touch *touch, Event *event) override;
	virtual std::function<void(Touch*, Event*)> getTouchEndedFunc() override
	{
		return CC_CALLBACK_2(Guide::onTouchEnded, this);
	}

	virtual void onEnter() override;
	virtual void onExit() override;

protected:
	//在最上层创建一个GuideBg,然后把target按钮从原节点上拿下来,添加到GuideBg上
	virtual bool doInit() override;

protected:
	int m_iGuideType;
	std::function<void()> m_callback;

	Node* m_pRoot;

	Node* m_pTarget;
	int m_targetLocalZOrder;
	Vec2 m_targetPos;
	Node* m_targetParent;

	ui::Text* m_pTextPrompt;
	std::string
首页 上一页 1 2 3 4 5 下一页 尾页 2/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇13:图像模糊处理 下一篇ReplaceChar

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目