不规则精灵重叠点击问题

这种图形,比如拼图游戏,不规则图形的透明区域也有点击事件,有什么好办法解决这种需求吗。
如下图,有的部分重叠了,不能准确点到有颜色的区域,有的地方空白也能点。

1赞

我也看到这个了,自己这样没成功,我下载这个demo再试试

不行,判断不准确


用多边形检测不行吗

你是说Mask的图片遮罩还是碰撞组件的polygonCollider吗,这两个东西,mask会增加drawcall,多边形碰撞组件编辑麻烦,对几百个小地图手动编辑太复杂。

使用像素检测,检测点到对象里该坐标的颜色是否是透明的。

是这样想的,但是还没找到怎么去实现


正在参考这篇几年前的文章,用cocos新版本的TS语言去重写一下看看

不用 mask遮罩, 可以事先把图片的大致多边形区域算出,然后检测的时候只需要用cc.Intersection.pointInPolygon这个方法判断即可

正在研究怎么获得有颜色的不透明多边形区域,卡就卡在这里了。判断点在不在区域内有现成API好弄。

这个按钮了解一下

了解了,以前没用过这个按钮哈哈,这个作为备选方案。我再研究下那个像素检测的办法。

搞出来了,那个东西

放一个刚体在上面,然后做一次hittest就OK了

总结:
1,像素检测的办法
方案提供者:Frogince
分析:新版本官方建议用convertToNodeSpaceAR,精灵的锚点设置为(0,0),注意不能用自定义尺寸进行改变大小,可以用缩放的方式,SizeMode的选择。仅Web平台有效。
代码如下,绑定到需要的精灵上即可


2,多边形碰撞组件自动获得多边形区域点,
方案提供者:zhuhf zhuhangfeng
分析:适合数量较少,比较固定的节点。

image
判断点是否在区域内cc.Intersection.pointInPolygon
代码如下:


所以根据自己的需要,选择相应的方法吧,谢谢大家集思广益,踊跃参与。

1赞

:+1:很棒的意见,这个项目没用物理引擎,现在用的像素那个方法

像素的方法,第一个是getHtmlElemntObj这块,getTexture自动合图和不合图应该是有区别的,貌似得做一下兼容;第二点就是看起来只是用在web端的。第三点是这个脚本如果是挂载到图片上的,那么就得做一下事件吞噬的处理。要不然事件应该没法传递到下层吧。

image

第二点如果有很大的量的需要, 可以做一个插件,动态的生成节点,加图片,加PolygonCollide组件, 调用Regenerate Points方法(这个目前没找到怎么调), 保存, 解析出顶点数据,存到另一个json