不规则精灵重叠点击问题

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


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

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


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

1赞

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

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

image

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

这个一个图片几百个点,手动点那个按钮,都要卡几秒才出来。如果图太多,用代码动态的方式,可能初始化效率上有点慢

这么做的目的是先导出顶点,存储在一个json里面,然后在程序运行过程中, 只需要这个json中的顶点数据就行了, 不需要额外的使用PolygonCollider组件去动态获取

哦哦,但是有点花时间,在这个功能上。可行性倒是可以。

所以是量大才比较需要,没多大的量的话, 以上三个方法都可以用, 没必要整这么麻烦

像素那个居然微信小游戏不能正确使用,不知道是不是getHtmlElementObj的问题,只能Web?小游戏平台貌似不行

那方法只能web, 如果要小游戏平台, 要另想办法拿到图的base64或者uint8array才行,

可以试一下renderTexture.readPixels方法看有没有数据,有些平台这个方法没用

Uint8Array好像不行,这个函数参数
image

都拿到uint8Array了, 还要这个干嘛, 直接就是return array[x4 + (ywidth)*4 + 3]就行了

不懂你后面那个公式,这个好像拿不到。我准备用刚体那个方法试试了
image

他这个明显是要拖动的吧,json放进去顶点数据,手指拖动的时候还要去维护这个坐标的,可能还有缩放旋转什么的。。。

我觉得你的刚体的点不需要那么多,如果只是精确点击,完全可以省很多点,没必要点自动生成。

小地图块太多了,每个都手动生成好麻烦,这个不是刚体,是碰撞组件,你说的刚体hittest怎么做的啊,重写hittest吗

https://segmentfault.com/a/1190000039402029

研究了一圈,还是你说这个比较舒服。刚体那个,其实就是说的你这种,他是说的物理引擎里面那个刚体多边形,一样的获得区域,然后重写hittest。