cocos2d-x中实现不规则按钮的点击效果
cocos2d-x中实现不规则按钮的点击效果
先说一点,这是从别人那里扒来的,亲测有效觉得不错,分享一下:
原理很简单,就是判断按钮图片的点击区域 像素点透明度是不是0,需要修改源代码;
我拿cocos2dx 3.10的版本(xcode环境)举例:
第一步,新建一个cocos项目,找到cocos的源代码中的Widget,它在ui 》base 》UIWidget.h文件中,在Widget类的public中添加三个函数:
virtual bool AlphaTouchCheck(const Vec2 &point);
virtual bool getAlphaTouchEnable();
virtual void setAlphaTouchEnable(bool isAlphaTouch);
然后再添加一个布尔型变量:
bool _isAlphaTouchEnable;
在UIWidget.cpp文件中实现:
bool Widget::AlphaTouchCheck(const Vec2 &point)
{
returntrue;
}
bool Widget::getAlphaTouchEnable()
{
return_isAlphaTouchEnable;
}
void Widget::setAlphaTouchEnable(bool isAlphaTouch)
{
_isAlphaTouchEnable = isAlphaTouch;
}
第二步,找到Button的源代码,在ui 》widgets 》UIButton.h中重载函数bool AlphaTouchCheck(constVec2& point); 在UIbutton.cpp中实现:
bool Button::AlphaTouchCheck(const Vec2& point)
{
if (getAlphaTouchEnable())
{
Image* normalImage =newImage();
normalImage->initWithImageFile(_normalFileName);//_normalFileName是button默认的那张图片路径
auto data = normalImage->getData();
if (data ==NULL)
{
returntrue;
}
auto locationInNode =this->convertToNodeSpace(point);
int pa =4 * ((normalImage->getHeight() - (int)(locationInNode.y) -1) * normalImage->getWidth() + (int)(locationInNode.x)) +3;
unsignedint ap = data[pa];
if (ap <20)//这里判断透明度,小于20就判断为点击无效,课根据自己的需要修改为0等等..
{
CC_SAFE_DELETE(normalImage);
returnfalse;
}
else
{
CC_SAFE_DELETE(normalImage);
returntrue;
}
}
returntrue;
}
第三步:比较重要,在在ui 》base 》UIWidget.cpp文件中找到boolWidget::onTouchBegan(Touch *touch,Event*unusedEvent),在
_touchBeganPosition = touch->getLocation();这一句代码后面添加
if(!AlphaTouchCheck(_touchBeganPosition))
{
return false;
}
ok,完成。源代码修改到这里结束;
然后基本没什么,就是Button的正常使用,要注意一点的是,这个button的点击效果有个开关:setAlphaTouchEnable(bool );
测试在HelloWorld.cpp中添加一个Button,选一个不规则的图片作为默认按钮图,代码:
Button*s = Button::create("testbtn.png");//图片中间区域透明
s->addTouchEventListener(this,toucheventselector(HelloWorld::btnclick));
s->setPosition(Vec2(300,200));
addChild(s);
s->setAlphaTouchEnable(true);//false为关闭该功能,和普通button一样,点击中间区域按钮后执行btnclick;true为开启,点击中间区域后不进入btnclick函数;
voidHelloWorld::btnclick(Ref*r,cocos2d::ui::TouchEventType t)
{
CCLog("Log:%s" ,"click!");
}
附加是我测试使用的图片,中间是空的
版权声明:
转载于:https://blog.51cto.com/12525470/1978197
cocos2d-x中实现不规则按钮的点击效果相关推荐
- Android处理ListView中的Item中的Button按钮不能点击的问题
问题描述:ListView列表中的Button按钮按钮不能点击 解决办法:在ListView中的Item项的布局文件中加上:android:descendantFocusability="b ...
- android中按钮凹下去,实现按钮的点击效果
不多说,直接进入正题: 1.新建一个Android Application Project 2.在res文件夹中放入几个精心挑选或是经过PS处理的按钮图片(用PS处理保存时,最好保存为同样大小的图片, ...
- Flutter中为图片设置波纹点击效果
题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. 重要消息 网易云[玩转大前端]配套课程 EDU配套 教程 Flutter开发的点滴积累系列文章 为图片添加水波纹点击效 ...
- CSS实现button按钮的点击效果
需求 如下图所示,如果我们要实现这样的按钮点击效果,用CSS怎样去实现呢? 实现 个人方法是通过伪元素before来实现,上代码: HTML: <button class="prima ...
- 前端实现表格中的颜色变化以及不同点击效果
环境: Python flask框架下的 html页面 目标: 1. 实现根据不同status显示不同颜色 2. 实现表格中对应链接根据不同状态不同点击效果 效果: 不同任务状态不同颜色显示,不同重启 ...
- 给页面字段中添加一个按钮,点击按钮实现弹窗效果
页面效果: 点击按钮后弹窗效果: 点击左上角搜索框效果: 页面实现代码 首先配置一个入住房间字段 <field><header>入住房间</header><d ...
- android 按钮顶级效果_Android 中按钮的点击效果
Android 中按钮点击后的效果通常是通过更换图片,或者背景色来实现的. 之前做的一直都是手动写在点击事件里,今天发现了一种更合适的方法,写在xml文件中. 比如,我有两张图片,一张是点击前的bef ...
- C#中调用Flash按钮,点击按钮可打开相应的功能
1.制作一个FLASH按钮,并在按钮上添加如下代码: on (release) { fscommand ("Send Action"); } 2.生成swf文件 3.在FLASH控 ...
- vue遇到的小白问题之三——按钮的点击效果的实现
问题是,需要对一个按钮进行的点击判断.其实就是disabled的使用 遇到的问题是disabled只要写在vue的按钮上就不能点击,不能进行判断.无论disabled=true还是disabled=f ...
最新文章
- Processes and Threads
- qt 关闭对话框 提醒_qt5信息提示框QMessageBox用法
- JavaFX中的塔防(5)
- STM32位带操作实现过程解析
- linux 修改 java 内存_Linux 和 Windows修改Java虚拟机内存大小
- python如何批量下载邮箱全部附件_Python编写执行测试用例及定时自动发送最新测试报告邮件...
- 大数据,并非一蹴而就
- SVN学习总结(4)——解决Win10 SVN图标不显示问题
- 向量的各种积,都有哪些,分别如何表示
- 新浪微博错误提示代码
- 容器存储卷的介绍与使用
- 快慢指针(Java版)
- matlab二阶滤波器设计,基于matlab的各类滤波器设计
- 精读《设计模式 - Prototype 原型模式》
- 计算机无法共享的原因,文件夹无法共享的原因及其解决办法
- Java八股文基础知识
- 智能车载终端项目方案
- 打造FreeBSD桌面系统
- DTE和DCE的区别下:配置串口链路通信
- 16个HTML5 框架、模板以及生成工具
热门文章
- ac3168无线网卡驱动下载_计算机基础:网卡
- java反射创建实例_Java反射创建实例
- iphone11没有电池小组加件_iPhone 11系列工信部数据:全系4GB运存电池最大达3969mAh...
- 搭建一个企业级的Vue工程!
- 分分钟写出Vue原理
- Spring MVC访问页面拦截js和css文件解决方法( No mapping found for HTTP request with URI [/Recruit/js/popper1.15.0.)
- 20200729:力扣199周周赛题解(下)
- 20190830:(leetcode习题)二叉树的最大深度
- dataframe 如何增加新的索引_带你领略pandas中多表之间如何处理
- 大小写 字符串_C# 读取环境变量,和字符串大小写转换