先看一个游戏的UI场景,这是个典型的SLG游戏,其中的“魏、蜀、吴”是需要玩家选择的阵营,也就是“魏、蜀、吴”三个不同颜色的区域是三个不同的Button,也就是本文要讲的“不规则Button”。
Coco2d-x的Button继承于Widget,Widget的点击触发实际的判断是hitTest方法,Widget的判断只是组件本身的矩形Rect的范围,touchBegin 才会return true,touchMove、touchEnd才会执行。
要实现Button区域的相互覆盖且不相互干扰,就要对其hitTest方法进行重写,判断点击区域的alpha通道是否为0,怎么获取每个点的透明度,就需要在创建Button的时候同时创建一个Boolean的数组用来存储每个点的RGBA中A的值。Image有getData的方法这个方法就可以获得RGBA的值,然后遍历存储每个Alpha通道的值。
当点击发生时,获得点击的坐标,根据坐标获得alpha,然后判断透明度是否为0,当然大家也可以自己设置alpha值。
详细请参见GIT 地址:https://github.com/lede-singularity/GameEffect