CocosCreator矢量绘图组件(1)

news/2024/7/19 15:02:20 标签: 编程语言, js, python, javascript, html
htmledit_views">
html" title=js>js_content">

超级浣熊

Cocos引擎10年老用户,精通Cocos全家桶

  • Cocos-iPhone
  • Cocos2d-x
  • Cocos2d-html5
  • Cocos2d-html" title=js>js
  • Cocos Creator

2011年开始写中日英多语言博客
supersuraccoon-cocos2d.com 

Cocos 独立游戏上架AppStore

Cocos 电子书上架iBookStore

持续用 cocos 引擎编写各种有趣的东西!

今天给大家介绍我的一个项目:SVGComponent

开始之前,先上一段视频,让我们对SVGComponent有个感性的认识

01 SVG是什么?

SVG 全称是 Scalable Vector Graphics 中文是 可缩放的矢量图形, 它是用XML 来描述二维图形的语言。

SVG 图形对象可被组化、样式化、变形和重组,包括图像嵌套、变形处理、剪辑路径、Alpha蒙板、滤镜特效和模板对象。

SVG 的矢量特性可以让移动设备清楚地浏览 SVG 图像信息,在放大后不会出现模糊的情况。

02 邂逅SVG

大约在7年前,我第一次接触 svg,出于好奇,就用 cocos2d-html5 v2.x 写了一个 SVG 解析渲染 的演示程序。当然其中的实现功能非常的有限而且问题也很多,比如只支持画轮廓,无法填充图形,大部分的命令没有解析。

然后在5年前,用 cocos2d-html" title=js>js v3.9把程序重写了一下,把渲染方式升级到了 v3 的风格然后加入了颜色填充的功能。

最近在论坛搜索一些关于 cc.Graphics 帖子的时候,偶然看到有一些朋友提到了 svg 这个东西在 creator 中的使用可能性。

于是就有了我的这个,大幅度升级的 creator 版的 svg 扩展。

用一句话来描述一下SVGComponent个组件的作用:

读取 svg 文件,解析,使用 creator 的方式 进行渲染。

03 测试用例

在细说组件的功能之前,先来直接看下演示程序,看下目前这个组件已经 实现了哪些功能 和 能做这些什么,请看下面视频:

  • Tiger:演示了如何通过组件提供的一些内置属性,实现复杂图像的绘制过程渲染演示。

  • 汉字笔画:演示了如何通过组件提供的一些内置属性,实现汉字书写的过程渲染演示。

  • Yoga:演示了如何通过组件提供的一些内置属性,实现图像的触摸填色功能演示。

  • path:绘制的图形都是由 svg 支持的一个重要标签 path 所内置的命令组成的。

  • FillRule:组件所支持的 svg 内置的 填充规则 的实际渲染结果,包括了 非零填充奇偶填充。演示的例子包括了 自相交多边形带洞的图形不同路径走向的图形 。

  • Icons:进阶用例,所有图标都来自开源网站 game-icons.net,用于进一步验证解析库的正确性。

  • Toucan:演示了如何通过组件配合 cc.RenderTexture && FBO实现cc.Graphics纹理化并对其使用shader` 特效的演示。

04 一坑到底

看上面描述,你可能会觉得,这不是什么特别复杂的事情,但是如果有尝试做过相同事情的朋友,可能才会了解,这里面的 实在是太多了。

这些坑都是来自 svg 一方的,还有些问题是来自 creator 内部的。

cc.Graphics 是 creator 里的绘图组件。但是其提供的绘图接口还是非常有限的。此外,cc.Graphics 在对一些曲线绘制的图形填充的时候,也有 bug

取决于 svg 对象的复杂程度,cc.Graphics 可能会被很重度的使用,但是这在 native 平台会有报错出现。不过这个问题就在最近,已经被官方解决了。

上面列出的是一些主要的坑,还有无数的小坑,无数的细节调试,这里推荐一个很棒的在线 svg 路径调试工具 svg-path-editor ,在调试解析器的时候,有很多细节,都是对着这个编辑器同步单步调试来寻找问题的并解决的。

要解决这些大的问题,而且还要尽量的不修改引擎,同时支持 Web、 Android、 iOS 平台,还是很有挑战性的。

后面我会深入与大家介绍SVG相关基础图形、命令、SVG转JSON工具,也希望得到更多的人反馈和帮助,能利用SVG开发出更多创意作品。

参考资源与工具:

  • SVG 解析渲染:
    https://github.com/supersuraccoon/CocosSVG-HTML5

  • cc.Graphics Native: 
    https://forum.cocos.org/t/bug-2-2-2-4-3-native-graphics/99409/5

  • SVG 路径调试工具:
    https://yqnn.github.io/svg-path-editor/

  • cc.RenderTexture && FBO:
    https://store.cocos.com/#/resources/detail/2528

  • game-icons.net
    http://game-icons.net/


http://www.niftyadmin.cn/n/806028.html

相关文章

【并发工具源码系列】 Semaphore 源码解析

Semaphore 限制可以访问某些资源(物理或逻辑的)的线程数目 实际上是就是普通共享锁,内部静态类 Sync 继承了 AQS,实现了共享锁的 tryAcquireShared、tryReleaseShared。 逻辑就是正常共享锁逻辑,同时还可以实现公平和…

CocosCreator矢量绘图组件(2)

「超级浣熊」SVG矢量绘图组件,大神又增加新的应用场景啦!成功在Cocos Creator引擎中实现了汉字笔画临摹功能,请看下面视频: 昨天在交流群中,大家讨论了一些关于SVG的应用场景,今天上午「超级浣熊」就发来最…

Linux 系统中僵尸进程

Linux 系统中僵尸进程 Linux 系统中僵尸进程和现实中僵尸(虽然我也没见过)类似,虽然已经死了,但是由于没人给它们收尸,还能四处走动。僵尸进程指的是那些虽然已经终止的进程,但仍然保留一些信息&#xff0c…

【并发工具源码系列】 Exchanger 源码解析

Exchanger 线程之间可以进行元素交换(了解就行了) 实际就是 Exchanger 在没有线程竞争的时候,提供了一个 Node 叫 slot 当作交换的中间场地,让你这个线程和另外一个线程把值放在 Node#item 进行交换 交换流程是,如果…

rfc1945-http1.0自译本-(3) (转)

rfc1945-http1.0自译本-(3) (转)[more] 要解释的名词=名词解释(name definition) 规则的名字(name)就是它本身(不带任何尖括号,“”),后面跟个等号=&#x…

摸鱼还有段位?请勿对号入座...

承认吧!很多时候的加班就是为了弥补工作时间摸鱼的亏空而摸鱼,也是有段位和技巧的——1 各显神通 2 团队脑暴 3 带薪拉屎 4 手速比拼 5 里应外合 6 定时发送 7 天然优势 8 幡然醒悟 9 分工明确 一个月后——你周围的职场摸鱼达人多吗?你见过哪…

怎样使网页中的元素可编辑?? (转)

怎样使网页中的元素可编辑?? (转)[more]怎样使元素可编辑 作者:http://lucky.myrice.comE-Mail:amxh21cn.com在IE5.5中,可以设定元素的编辑属性。语法如下:object.contentEditable [ sEditable]; 其中的sEditable为下列三个之一&#xff1a…

Viterbi算法

clc;clear all;close all; Start_Pi [-1,-1];State_k [H,L];% 转移矩阵Transition_matrix [-1,-1.322;-1.322,-0.737];% 0 H L % H -1 -1% L -1.322,-0.373 % 序列中包含字母ACTG sequence [A,C,G,T]; Emission_matrix [-2.322,-1.737,-1.737,-2.322; -1.737,-2.322,-2.32…