Cocos Creator 实现画板和橡皮擦(有背景)

Cocos Creator 实现画板和橡皮擦(有背景),第1张

CocosCreatorDrawing

Cocos Creator完成的一个画板

GitHub - Juefeiye/CocosCreatorDrawing: CocosCreator画板  喜欢就star吧!!!

画板最终实现效果

在cocos论坛里面很多关于画板橡皮擦的问题,特别是有背景的橡皮擦问题,都没有什么好的解决方案。 

找了很多资料和自己的摸索之后,最后有了这么一个带有完整功能的画板,下面来一步步看怎么实现的吧。

    这里使用的是RenderTexture来解决

    首先创建好renderTexture,加入到node中来,因为renderTexture是cc的组件,所以我们只能用_sgnode来添加

    接着我们在touch事件中去实现绘画功能,这里我使用的是drawNode方式,官方提供的Graphics还未找到橡皮擦方法。

    这个时候基本的绘画功能就实现了                                   

    这个是本次的重点。这个橡皮擦也是搞得我头破血流的。

    其实如果没有背景,直接改成背景色线条就可以当橡皮擦用了,主要是需求要在有背景的情况下可以擦除,那么来探索下吧!

    资料翻了不少,只看到H5有canvas的一些接口可以用,可是cocos怎么用到这些接口呢,对应的一些属性怎么取到呢。    

    不经意间我发现了canvas里面的getContext()和一个globalCompositeOperation属性,这个属性好像是解决h5橡皮擦的关键,那么我在cocos里面能找到这个属性是不是就可以解决橡皮擦问题了。

    首先,h5里面是用canvas来绘画的,cocos creator这里用的是renderTexture,那么这2者会不会有什么关联呢。果不其然,我在renderTexture下找到了这2个关键的属性

有了这2个属性之后,我们就可以开始干活了!这里的实现详细可以看 HTML 5 canvas globalCompositeOperation 属性

这里要注意canvas坐标系和cocos的坐标系不一样   

到这里就解决了有背景的橡皮擦问题了,我们直接使用最底层的canvas。橡皮擦效果

其实画板里面还有贴纸功能,还带用动效的贴纸,这个功能如果有需要的话再详细解读

GitHub - Juefeiye/CocosCreatorDrawing: CocosCreator画板  喜欢就star吧!!!

图中将进度条背景和进度条分开,便于观察理解。

将进度条显示图的渲染模式改为Filled(填充模式),填充起始位置(Fill Start)改为0,填充总量(Fill Range)改为1(截图中为05,即进度条加载到50%):

//获取到进度条

let btn_leftPosition = ccfind("Canvas/ProgressBar_test/btn_leftPosition");

//将进度条图的填充总量置为0

thisbtn_fillRange = btn_leftPosition_components[0]fillRange = 0;

//将进度条图的填充起始位置置为0(可在编辑器直接置为0)       

btn_leftPosition_components[0]fillStart = 0;

let self = this;

thisschedule(function () {           

    //随机数字

    let math_random = Mathceil(Mathrandom() 1 + 15);

    //进度条填充总量增加           

    selfbtn_fillRange = btn_leftPosition_components[0]fillRange += math_random / 100;

    //判断进度条是否加载完全

    if (selfbtn_fillRange >= 10) {

        //进行下一步 *** 作

    }

consolelog("selfbtn_fillRange = ", selfbtn_fillRange);

}, 01);

```

当然也可以自定义各种加载。

设置进度条的Mode属性为Filled(填充模式),进度属性Progress可以自主设定,也可以根据预加载设定,进度条的显示条设置参考方法1里面的第2条;

let jindutiao = thisschedule(function () {

    //随机数字 

    let math_random = Mathceil(Mathrandom() 1 + 15);

    //进度条填充总量增加 

    thisProgressBarprogress += math_random / 100; 

    //判断进度条是否加载完全

    if (thisbtn_fillRange >= 10) {

        //进行下一步 *** 作

        consolelog("停止", jindutiao);

    }

}, 01);

运行效果如下:

如有问题,欢迎指正,共同学习,谢谢。

cocos在游戏界面一段时间后显示的方法非常简单,首先在cocos内对软件进行设置,然后再在游戏内设置,然后导入,就能显示了。

步骤就是首先创建背景,然后创建节点渲染节点,点击sprite精灵,然后创建进度条,再导入,就可以显示了。

本文参照官方文档,涉及camera可以参考 Cocos 30 camera

区别于 3D 模型对象,我们将不涉及模型的渲染体统称为 2D 渲染对象。 2D 渲染对象的处理在底层的数据提交上与 3D 模型存在差异,其遵循自己的规则做出了一些针对性的调整以实现更好的效率表现和使用体验。

2D 渲染对象的收集采用树状结构,RenderRoot 节点(带有 RenderRoot2D 组件的节点)为 2D 对象数据收集的入口节点, 所有的 2D渲染对象需在 RenderRoot 节点下才可以被渲染

由于 Canvas 组件本身继承 RenderRoot2D 组件 ,所以 Canvas 组件也可以作为数据收集的入口。 2D 渲染节点必须带有 UITransform 组件作为渲染顶点数据、点击或者对齐策略等功能生效的必要条件。

2D 渲染也可以支持对模型进行渲染,唯一的条件是带有模型组件(例如 MeshRenderer/SkinnedMeshRenderer)的节点必须添加 UI/UIMeshRenderer 组件才可以和 UI 在相同的管线上进行渲染。

引擎中所有不拥有的 model 的渲染对象都为 2D 渲染对象。与 3D 对象不同,2D 对象本身不拥有 model 信息,其顶点信息是由 UITransform 组件的 Rect 信息持有并由引擎创建的,且本身没有厚度。由于引擎的设计要求,2D渲染对象需要为 RenderRoot 节点(带有 RenderRoot2D 组件的节点)的子节点才能完成数据的收集 *** 作。

所以 2D 渲染对象的渲染要求有两点:

由于 2D 渲染对象在 Camera 的可见性判断上和 3D 渲染节点并无区别,所以用户需要自己控制节点的 layer 属性并设置 Camera 的 Visibility 来配合进行分组渲染,如果场景中出现多个相机的情况,错误的 layer 设置导致节点重复渲染或不渲染。

这里请 3D 12 版本升级的用户注意,我们纠正了之前的 Canvas 只会渲染其子节点的行为,目前需要用户自己管理节点的 layer 和相机的 Visibility,之前使用了多 Canvas 渲染的用户可能会需要对项目做出调整以达到更合理的场景结构。

>

以上就是关于Cocos Creator 实现画板和橡皮擦(有背景)全部的内容,包括:Cocos Creator 实现画板和橡皮擦(有背景)、cocoscreator之微信小游戏的进度条(填充模式)、cocos如和在游戏界面一段时间后显示图片等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9558682.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存