今天介绍一下,d出框的和屏蔽罩的小实现~
d出框主要用到了cocos2dx生命周期里面的OnEnter()函数,就是当Layer被addChild的时候会调用的函数(所以如果把OnEnter的代码加到init里面效果应该也是一样的~)
屏蔽罩的实现是用了MenuItemImage和Layercolor,前者可以设置区域大小并获取点击,后者则可以设置color4B。 效果图如下:
主要代码:
//ShaderLayer.hvoID setClickBgBlock(std::function<voID()> block);std::function<voID()> clickBGBlock; //ShaderLayer.cppauto 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,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
总结以上是内存溢出为你收集整理的【cocos2dx 小技巧】半透明屏蔽罩和d出框的实现全部内容,希望文章能够帮你解决【cocos2dx 小技巧】半透明屏蔽罩和d出框的实现所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)