最近再看cocos-2d的东西,期间得到了同事和老板的支持,在此感谢。
之前一直在做vue网页,现在看游戏cocos-2d这块,刚接触肯定有点不适应。cocos-2d多了很多感念:导演、场景、节点等。
这里多说点,cocos creator是一个官方的编辑器,但自从这个编辑器出现之后,很少有人直接用cocos-2d js做开发了,而是在creator里做cocos-2d js项目,cocos-2djs那一套繁琐的开发流程和UI制作,被creator极大的简化了。用了编辑器后,项目目录都有不同。所以,从这个方面来讲,creator并不是一个简单的编辑器,他还做了很多流程上的东西,这点区别于文本编辑器等。官网也解释了2者的区别:

1.希望配合 Cocos2d-x 来使用 Cocos Creator:Cocos Creator 内部已经包含完整的 JavaScript 引擎和 cocos2d-x 原生引擎,不需要额外安装任何 cocos2d-x 引擎或 Cocos Framework。
2.无关省略
3.在编码的时候直接查看 Cocos2d-JS 的 API:Cocos Creator 可以说脱胎自 Cocos2d-JS,它们的API一脉相承,有很多相同的部分,但由于使用了全新的组件化框架,两者的API是有差异的,并且无法互相兼容
4.希望将旧的 Cocos2d-JS 游戏直接运行到 Cocos Creator 上:由于两者的 API并不是100%兼容,所以这点是做不到的
5.用继承的方式扩展功能:在 Cocos2d-JS 中,继承是用来扩展节点功能的基本方法,但是在 Cocos Creator 中,不推荐对节点进行继承和扩展,节点只是一个实体,游戏逻辑应该实现在不同的组件中并组合到节点上

Cocos Creator 提供的工作流和开发思想和以往的 Cocos2d-x 引擎是存在很大差别的。
所以,建议直接上cocos creator,本文的主角也是cocos creator。
这些概念熟悉了这些之后,开始上手第一个项目,也是官网上的一个例子。

我们来看下cocos-2d的组件脚本(javascript):

cc.Class({
extends: cc.Component, properties: { }, // use this for initialization
onLoad: function () { },
start:function{ }
// called every frame
update: function (dt) { },
lateUpdate:function () { }
});

vue的:

export default{
data(){
return{ }
},
created(){ },
mounted(){ },
methods:{ }
}

  

2者是不是很像,他们都有自己生命周期函数:

onLoad vs created

start vs mounted

upadte vs update
cocos-2d的update是每一帧执行,是主动的,在方法里改变数据。

vue的update是被动的,数据变化后引起update执行。

lateupdate vs $nextTick

在所有组件的 update 都执行完之后才进行其它操作,那就需要用到 lateUpdate 回调;

在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。

除此之外,还有他们的数据放的地方:
properties vs data
cocos-2d的数据并不一定都在properties里,可以直接赋值给this。区别是在properties可在编辑器面板的属性检查器里配置,直接赋值的只能在代码里修改。

当然,这个比较并不准确,只是说明他们有相似的地方,至少在生命周期函数上。
vue这种前端mvvm框架是数据改变引发UI渲染,cocos-2d也是这样的,只需要关注数据即可。
其实,cocos-2d也是支持es6写法的,根目录下的jsconfig.json

{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"experimentalDecorators": true
},
"exclude": [
"node_modules",
".vscode",
"library",
"local",
"settings",
"temp"
]
}

  

es6语法的js组件脚本:

const {ccclass, property} = cc._decorator;
@ccclass
export default class Game extends cc.Component {
@property(cc.Prefab)
starPrefab = null;
onLoad(){ }
start(){ }
update(){ }
lateUpdate(){ }
}  

这么看来,在JavaScript这块,两个的写法确实很像。

目前来说,官网的文档示例和提供的范例里基本都是es5的写法,es6的例子比较少。不过,这不重要。

另一个维度:cocos-2d VS vue的更多相关文章

  1. Cocos 2d TestCPP 学习

    Cocos 2d testcpp包含了大量的demo, 对于新手学习cocos引擎具有非常大的帮助.因为接下来的开发项目有可能会用到该引擎,所以希望可以利用自己的业余时间提前熟悉起来.该篇文章会记录自 ...

  2. 如何制作一个类似jquery插件的vue插件

    vue拿来写插件,会不会太那啥? 请跟我念,"不会,符合业务需求才是你的老板最想要的." 如何封装一个可以全局调用的vue插件 其原理其实相当简单,通过new Vue(vueCom ...

  3. Unity 2D游戏开发高速入门第1章创建一个简单的2D游戏

    Unity 2D游戏开发高速入门第1章创建一个简单的2D游戏 即使是如今,非常多初学游戏开发的同学.在谈到Unity的时候.依旧会觉得Unity仅仅能用于制作3D游戏的. 实际上.Unity在2013 ...

  4. Numpy怎样给数组增加一个维度

    Numpy怎样给数组增加一个维度 背景:很多数据计算都是二维或三维的,对于一维的数据输入为了形状匹配,经常需升维变成二维 需要:在不改变数据的情况下,添加数组维度:(注意观察这个例子,维度变了,但数据 ...

  5. Unity3D 创建一个简单的2D游戏

    开始研究Unity3d 中的2D游戏. 首先创建出一个项目: 然后创建出一个场景: 然后添加一个背景: 然后创建一个主人公对象: 可以是自己做的素材,也可以是用unity裁剪的素材, 下面贴出裁剪素材 ...

  6. 一个基于ES6+webpack的vue小demo

    上一篇文章<一个基于ES5的vue小demo>我们讲了如何用ES5,vue-router做一个小demo,接下来我们来把它变成基于ES6+webpack的demo. 一.环境搭建及代码转换 ...

  7. 快速构建一个简单的单页vue应用

    技术栈 vue-cli webpack vux,vux-loader less,less-loader vue-jsonp vue-scroller ES6 vue-cli:一个vue脚手架工具,利用 ...

  8. 一个极其简易版的vue.js实现

    前言 之前项目中一直在用vue,也边做边学摸滚打爬了近一年.对一些基础原理性的东西有过了解,但是不深入,例如面试经常问的vue的响应式原理,可能大多数人都能答出来Object.defineProper ...

  9. 一个域名下多个Vue项目

    公司写的网站要英文和中文的,所以就写了两个项目,都是用vue写的单页面项目,但是域名只有一个,所以就想把两个vue项目合并到一个域名下面.思考:vue的页面都是单页面应用,说白了就是一个index.h ...

随机推荐

  1. hdu 1569 最大权独立集

    /*最大点权独立集=sum-最小点权覆盖*/ #include<stdio.h> #include<string.h> #include<queue> using ...

  2. 关于linux中使用vim打开文件出现^M的解决方法

    在linux下,不可避免的会用VIM打开一些windows下编辑过的文本文件.我们会发现文件的每行结尾都会有一个^M符号,这是因为 DOS下的编辑器和Linux编辑器对文件行末的回车符处理不一致, 各 ...

  3. ASP.NET MVC 源码分析(一)

    ASP.NET MVC 源码分析(一) 直接上图: 我们先来看Core的设计: 从项目结构来看,asp.net.mvc.core有以下目录: ActionConstraints:action限制相关 ...

  4. sublime3设置快捷键在浏览器打开预览

    我下的st3默认不能使用快捷键在浏览器打开,所以要找到源文件然后选择在浏览器打开,非常麻烦.找了很久,终于找到了一个在浏览器打开的快捷方式. 亲测有效. 1.确保你的st3已经安装了package c ...

  5. 升级DM5校验

    1,将某个文件生成带DM5的文件,使用srec_cat工具: read A   #原始文件 srec_cat $A -o 要生成的文件名称  -Line_Length 46 -Address_Leng ...

  6. 您必须先调用“WebSecurity.InitializeDatabaseConnection”方法。。。

    有如下代码: [Authorize] public ActionResult Index() { ViewBag.ShowList = ShowList.GetShowList(WebSecurity ...

  7. Codeforces Round #332 (Div. 2)C. Day at the Beach 树状数组

    C. Day at the Beach   One day Squidward, Spongebob and Patrick decided to go to the beach. Unfortuna ...

  8. Django day11(一) ajax 文件上传 提交json格式数据

    一: 什么是ajax? AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互 ...

  9. 线性预测与Levinson-Durbin算法实现

    在学习信号处理的时候,线性预测是一个比较难理解的知识点,为了加快很多朋友的理解,这里给出Levinson-Durbin算法的线性预测实现和一个测试Demo,Demo中很明确的把输入信号.预测信号.预测 ...

  10. WebService开发-CXF

    Web Service 开发方式 Apache CXF 一.关于Apache CXF 在网址http://cxf.apache.org/可以查看到关于Apache CXF的下载及文档介绍,这里不再多做 ...