Cocos Creator基础教程(13)—组件与节点的秘密

Stella981
• 阅读 743

公众号上我们已经学习了有段时间的Cocos Creator组件开发了,组件化开发到底有是什么?Shawn这阵子思绪不断,同时将自己的理解应用于实际项目中,颇有心得,在这里做一个分享。

1. 节点与组件的关系

有经验的同学,一上手Cocos Creator就能想到「装饰模式」,我们看下定义:

装饰模式(Decorator)动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

再看一下装饰模式的基本UML类图结构 :

Cocos Creator基础教程(13)—组件与节点的秘密

大话设计模式-装饰模式UML

请注意,上图是我从《大话设计模式》中截取的,图中的Component在Cocos Creator对应的是Node,Decorator对应的是Cocos Creator中的Component。

非程员同学,看到这里可能会觉得比较懵,这里请耐心听我为解释「装饰模式」。既然其中有装饰二字,就应该有装饰品和被装饰者,例如:一个人穿上衣服、背上双肩包、 带上电脑和手机(哈哈!典型的Shanw平时的装扮)。

Cocos Creator基础教程(13)—组件与节点的秘密

程序员背包

上图中的就是被装饰者衣服双肩包都是装饰品。其中衣服、双肩包提供了渲染能力,美化外表,让Shawn可以正常地走在大街上;电脑赋予Shawn工作能力,比如写代码、写点教程,当然人走在大家街上你是看不到电脑的,因为对应的行为场景没有激活;手机上不时会收到其他人发来的消息或任务,形成与外部世界沟通的交互界面,提供的是UI交互能力

当Shawn把《大话设计模式》这本书看懂了,并能真正运用了,《大话设计模式》这本书也就装饰了我,只不过从外表上是看不出来的,需要工作起来(代码运行起来)才能表现出来。说不定那天我又把之前的知识给忘记了,衣服、电脑、手机可能还会换,装饰品对装饰被者来说是动态变化的。

说了这么多,我对组件与节点关系的理解是:组件为节点赋能

Cocos Creator基础教程(13)—组件与节点的秘密

组件为节点赋能

2. 程序员为美术、策划赋能

基于Cocos Creator这样的可视化引擎,组件代码有着巨大的意义。程序员开发出的组件代码不应该只是满足自己完成任务,而应该是为游戏设计师提供体验优良的工具,当然你在提供这些组件工具的同时,你的设计水平也在提高。

组件脚本就像是美术生产的图片、策划编写的文案一样,是游戏开发中的一项基础生产资料,游戏内容更多的是应该由游戏设计师去完成。

程序不仅仅是编写组件脚本,还应该向团队其他人员提供更多的帮助,比如:教他人使用Cocos Creator、教他人使用你编写的组件、编写项目辅助工具...。目的是用程序的知识、思维和工具,去装饰身边的人,给他们提供他们本身不具备的能力,这样才能更多地发挥程序员的价值。如果程序员平时没有察觉到开发体验(各种不爽),做出的产品也很难谈的上有用户体验。

3. 人与人之间组件化协作

可能大多数人认为上面的协作模式太过理想化了,确实如些,这么多年了,仅在最近Shawn才被幸运眷顾到,哈哈!Shanw服务的一家儿童教育公司,开发了一套H5教学互动课件。

初期Shawn为美术人员进行了简单的Cocos Creator学习培训,制作了一个Demo,并对Demo的设计思路、组件用法、项目规范进行了说明。然后就把内容设计完全效给两名美术同学。没想到他们丰富的想像力,把我提供的组件脚本完成了之前从未想到过的功能,而且这两名美术同学才刚从大学毕业!

项目过程中,这两位美术同学不仅是美术用PhotoShop出图,还整理需求、编辑界面、编辑动画、实现需求;Shawn则在一边打酱油,写点教程,即时根据他们提出的功能点提供解决办法或组件代码。同时引导他们使用git来管理项目资源;引入任务管理系统梳理工作内容;部署内部自动化构建环境方便授课老师进行测试、磨课、教学等,协作的非常顺利。

站在团队基础上,为他人赋予能力,将自己当成装饰品做为组件,去装饰他人让节点充分发挥能力,进行人与人之间的组件化协作,这是我最近从Cocos Creator组件化开发收获的启发。

4. 小结

这一篇没讲多少Cocos Creator具体的技术细节,简单讲述了「装饰模式」的结构,同时推荐《大话设计模式》这本书。Shawn写教程的风格多少受到《大话设计模式》、《Head First》的影响。 后面Shanw通过Cocos Creator的组件化开发,若有所悟地将组件化应用到人与人之间的协作,这是自己在开过程中的一点心得,希望对你也有所帮助。

今天周未,奉送一段动漫给大家,放松下心情!


欢迎关注「奎特尔星球」微信公众号,更期待您向公众号投稿,来我们一起成长!

Cocos Creator基础教程(13)—组件与节点的秘密

热门文章TOP10,邀你遨游「奎特尔星球」

  1. Cococ Creator基础教程—meta的秘密(3)

  2. uikiller再度进化支持Cocos Creator 2.0

  3. 庆祝「奎特尔」500勇士,诞生!

  4. 当creator遇上protobufjs—感谢有你,再战2.0

  5. Cocos Creator基础教程(7)—场景切换

  6. Cocos Creator基础教程(9)—优化代码编辑器

  7. Cocos Creator基础教程(4)—color属性的妙用

  8. Cocos Creator基础教程(1)—从zIndex开始

  9. Cocos Creator基础教程(2)—聊聊scale与size属性

  10. Creator模块介绍—领略模块化的力量

本文分享自微信公众号 - Creator星球游戏开发社区(creator-star)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
uikiller使用手册(一)
一、前言uikiller是使用名命规则来控制UI节点、组件和触摸事件,减少UI相关的代码与编辑器设置,实现原理是提前对UI树的遍历。在CocosCreator中UI编程基于组件模式,我根据自己的项目经验,将组件分为两类:法宝型与结界型。法宝型组件法宝型组件:以装饰宿主节点为己任,从不控制其它节点。特
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
00_设计模式之语言选择
设计模式之语言选择设计模式简介背景设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。设计模式(Designpattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这