Cocos2dx3.2编写常用UI组件(一)新手指导框GuideLayer

来源:未知 责任编辑:责任编辑 发表时间:2015-09-17 09:44 点击:

前言:

在很多的游戏里(特别是RPG游戏),一开始都会有一个关于操作的介绍,几乎都像下图那样子的。

\

除了系统希望你所点击的区域外,其余区域都会变暗,而且你点暗的区域是不会有任何反应的。

 

正文:

下面我们来讲怎么实现的:

一、实现思路:

我们可以用Cocos2dx提供给我们的LayerColor,在你想要被点击的区域周围添加4块LayerColor,如下图所示

\

 

二、代码实现

GuideLayer.h

 

class  GuideLayer : public Node{
private:
	GuideLayer();
public:
	//用于创建一个指导层,参数:可触控区域
	static GuideLayer* create(const Rect& rect);

	//用于创建一个指导层,参数:可触控区域,不可触控区域的颜色
	static GuideLayer* create(const Rect& rect,const Color4B& color);

private:
	bool init(const Rect& rect);
	bool init(const Rect& rect,const Color4B& color);
	bool onTouchBegan(Touch* touch,Event* event);
private:
	LayerColor* area1;
	LayerColor* area2;
	LayerColor* area3;
	LayerColor* area4;

	Color4B defaultColor;

	Rect m_rect;
	EventListenerTouchOneByOne* m_listener;
};

头文件并不复杂,应该可以看明白。这里的defaultColor是黑色,透明度为25%

 

 

GuideLayer::GuideLayer():
	defaultColor(0x00, 0x00, 0x00, 0xC0)
{}

 

 

GuideLayer有两个create方法,区别在于一个create是使用默认的颜色(黑色),另一个可以接受一个颜色参数

先看使用默认颜色的create和init方法

 

bool GuideLayer::init(const Rect& rect){
	if(!Node::init())	return false;
	m_rect = rect;
	Size visibleSize = Director::getInstance()->getVisibleSize();
	area1 = LayerColor::create(
		defaultColor,
		visibleSize.width,
		visibleSize.height - rect.getMaxY()
		);
	area1->setAnchorPoint(Point(0,0));
	area1->setPosition(Point(0,rect.getMaxY()));

	area2 = LayerColor::create(
		defaultColor,
		visibleSize.width,
		rect.getMinY()
		);
	area2->setAnchorPoint(Point(0,0));
	area2->setPosition(Point(0,0));

	area3 = LayerColor::create(
		defaultColor,
		rect.getMinX(),
		rect.getMaxY()-rect.getMinY()
		);
	area3->setAnchorPoint(Point(0,0));
	area3->setPosition(Point(0,rect.getMinY()));
	
	area4 = LayerColor::create(
		defaultColor,
		visibleSize.width - rect.getMaxX(),
		rect.getMaxY() - rect.getMinY()
		);
	area4->setAnchorPoint(Point(0,0));
	area4->setPosition(Point(rect.getMaxX(),rect.getMinY()));

	this->addChild(area1);
	this->addChild(area2);
	this->addChild(area3);
	this->addChild(area4);

	//设置监听器,截断非rect外区域的触摸事件
	m_listener = EventListenerTouchOneByOne::create();
	m_listener->onTouchBegan = CC_CALLBACK_2(GuideLayer::onTouchBegan,this);
	Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(m_listener,this);

	return true;
}
其实实现非常的简单,就是根据传入的rect区域计算出4个不可触控区域LayerColor的坐标和大小
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • cocos2d-x学习笔记(19)--label 、label atlas
  • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
  • Cocos2d-x 2.0 之 Actions “三板斧” 之一
  • Cocos2d-x学习(一):HelloWorld
  • cocos2d-x学习笔记(18)--游戏打包(windows平台)
  • cocos2d 设置屏幕默认方向
  • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
  • cocos2d-x学习笔记(15)--地图的使用(TMX)
  • cocos2dx在xcode下开发,编译到android上(2)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1