前言
最近在做一款绘图游戏。需要取出调色盘中的颜色。于是乎就在群里跟大家讨论了一番,下面将实施方案放出,仅供参考。
松散的调色盘
(此图左侧是调色盘,右侧是画板,绘画功能已经实现)
对于这种调色盘,颜色之间距离比较大,可以使用矩形碰撞的形式,然后每个节点设置上对应的颜色。碰撞后即可获得颜色数据。
不规则的调色盘
(左侧是调色板,右侧是根据取出的数据设置texture生成的图像)
这种调色盘即使使用多边形碰撞做起来也很麻烦。所以可以采用RenderTexture。取出屏幕每个像素点的颜色。然后根据点击的坐标点的位置取出对应的颜色即可。不过,在取颜色的时候还是遇到了一些问题的。比如使用camera + RenderTexture 取出的图形的范围是缩小的,而且图像是y轴翻转的。虽然是采用RenderTexture,但是方式也有很多种,不为了方便获取,调色板anchor 设置为(0,0)
- 直接获取一个像素点的颜色这种方式需要将传入的x和y转换成世界坐标。
- 获得整个屏幕的颜色数据,然后根据点击位置转换后的世界坐标。获取像素点。这种方式跟第一种方式区别不大,只是第一种方式每次都要readPixels.而这种方式读 取一次存放好就可以了
- 从读取的颜色数据中取出调色盘所对应的 颜色数据,根据点击坐标转换后的本地坐标获取颜色数据。
- 使用相机只渲染调色盘大小的RenderTexture。然后使用点击坐标转换后的本地坐标获取数据。这样获取到 数据总是缩小的。可能是我的使用方式不对,不过我调整了相机的ZoomRatio 也能达到现在显示的效果。
- 所以右侧显示出来的图像才会大小正好。至于图像Y反转,设置一下图像节点的scaleY为-1 就可以了。
结语
调色盘的获取方案,先总结这么多,其实群友们还提了很多其他的方案,只是没来得及验证。demo已经提交到框架的git中,已有git权限的同学可以更新获取了。长按下方二维码,关注《微笑游戏》公众号,获取更多精彩内容。