最近几天在研发游戏场景编辑器,遇到了一个非常烧脑问题,我用的是egret白鹭引擎开发的。
当前做的是一个绘画功能系统原本想的是这个绘画功能辅助玩家编辑场景画地图,我把所有需要做的功能都写完了,包括自定义画笔,画笔硬度效果,画纹理羽化等等功能都做完了,然后在最后测试的时候发现纹理画笔怎么也显示不出来纹理羽化效果
这里的实现方案是用的mask遮罩+模糊特效实现在一个完全透明图中画出透明区域,然后实现的羽化功能。但是最后写好怎么都出不来羽化效果让我一度怀疑egret白鹭引擎的特性,为此我还专门重新优美的设计了一下架构,但是还是不行。
按理说不管是egret.bitmap还是eui.group 还是eui.image都是基于displayobject的,displayobject里面就有这种模糊滤镜的功能,
但是还是不行了,我觉得可能是遮罩本身问题,然后我就一点点往回排查但是都没有思路,想了一早上问题到底是出在哪里,最后查完都没问题,根本就没问题呀,怎么会有这样的bug,所以以我的直觉,这可能和遮罩无关,于是我试运气方式的在模糊特效兼容性上下功夫。研究了一下可能是环境问题导致的模糊效果没办法渲染进去吧。
所以我就又加了一个group,把所有当前绘画内容都放到这里面,然后在这个vessel0上加滤镜特效等等功能,渲染bitmap从vessel1容器渲染
尽量给滤镜搭建一个良好的乘车环境,让其完美运行,我看看到底问题能出在哪里,实在不行就一点点删代码抽离问题,只不过有点浪费时间。
不过肯定可以解决的,只是时间问题而已
然后没想到就渲染成功了,红色是常规绘画轨迹,那个旁边就是应用羽化的纹理笔刷效果。
最终找到了原因,问题是出在了模糊特效兼容性了
回顾一下,解决方案就是给模糊特效应用的显示对象搭建良好的显示列表层次嵌套关系,然后从外部显示层次渲染,不要直接从加滤镜的显示对象上直接渲染,这样渲染不出来。
困扰我一天半的bug成功解决,而且这羽化纹理笔触太美了~