展会信息港展会大全

【cocos2dx 小技巧】半透明屏蔽罩和弹出框的实现,cocos2dx半透明
来源:互联网   发布日期:2015-09-28 14:53:47   浏览:3147次  

导读: 【cocos2dx 小技巧】半透明屏蔽罩和弹出框的实现,cocos2dx半透明 今天介绍一下,弹出框的和屏蔽罩的小实现~ 弹出框主要用到了cocos2dx生命周期里面的OnEnter()函数...

【cocos2dx 小技巧】半透明屏蔽罩和弹出框的实现,cocos2dx半透明

今天介绍一下,弹出框的和屏蔽罩的小实现~

弹出框主要用到了cocos2dx生命周期里面的OnEnter()函数,就是当Layer被addChild的时候会调用的函数(所以如果把OnEnter的代码加到init里面效果应该也是一样的~)

屏蔽罩的实现是用了MenuItemImage和LayerColor,前者可以设置区域大小并获取点击,后者则可以设置Color4B。 效果图如下:

主要代码:

//ShaderLayer.h

void setClickBgBlock(std::function<void()> block);

std::function<void()> clickBGBlock;

//ShaderLayer.cpp

auto item = MenuItemImage::create();

item -> setContentSize(visibleSize);

item -> setCallback([&](Ref *pSender){

//背景图点击时候执行

if (clickBGBlock != NULL) {

this -> clickBGBlock();

}

});

如果对ios中的block不熟悉的话,就搜一下lambda 吧(我觉得就是个匿名函数指针)。然后当MenuItemImage被点击时,就调用clickBGBlock()函数;

//HelloWorldScene.cpp

//屏蔽在popUp上的触摸

auto listener = EventListenerTouchOneByOne::create();

listener -> setSwallowTouches(true);

listener -> onTouchBegan = [](Touch *touch, Event *event){

auto target = static_cast<Sprite *>(event -> getCurrentTarget());

Vec2 locationInNode = target->convertToNodeSpace(touch->getLocation());

Size s = target->getContentSize();

Rect rect = Rect(0, 0, s.width, s.height);

if(rect.containsPoint(locationInNode)){

//这里return true swallowTouches才有效

return true;

}

return false;

};

这一段代码,是通用的,只要在最后面再加一句addEventListenerWithSceneGraphPriority就可以监听触摸控制,(你监听的target的ContentSize内)。

(我总觉得应该还有更简单的方法可以实现这样的功能,如果你知道,请第一时间告知我一声~)

附上代码+图片:http://7sblre.com1.z0.glb.clouddn.com/PopUpAndShaderLayer.zip

欢迎访问我的博客:helkyle.tk

http://www.bkjia.com/Androidjc/929408.htmlwww.bkjia.comtruehttp://www.bkjia.com/Androidjc/929408.htmlTechArticle【cocos2dx 小技巧】半透明屏蔽罩和弹出框的实现,cocos2dx半透明 今天介绍一下,弹出框的和屏蔽罩的小实现~ 弹出框主要用到了cocos2dx生命周...

赞助本站

人工智能实验室

相关热词: android开发 应用开发

相关内容
AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港