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

编程入门 行业动态 更新时间:2024-10-28 10:27:00

【cocos2dx 小技巧】半透明屏蔽罩和<a href=https://www.elefans.com/category/jswz/34/1771144.html style=弹出框的实现"/>

【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内)。

(我总认为应该还有更简单的方法能够实现这种功能,假设你知道。请第一时间告知我一声~)
附上代码+图片:.zip

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

转载于:.html

更多推荐

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

本文发布于:2024-02-17 05:41:42,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1692850.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:弹出   小技巧   屏蔽   cocos2dx

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!