另一个维度:cocos-2d VS vue
最近再看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的更多相关文章
- Cocos 2d TestCPP 学习
Cocos 2d testcpp包含了大量的demo, 对于新手学习cocos引擎具有非常大的帮助.因为接下来的开发项目有可能会用到该引擎,所以希望可以利用自己的业余时间提前熟悉起来.该篇文章会记录自 ...
- 如何制作一个类似jquery插件的vue插件
vue拿来写插件,会不会太那啥? 请跟我念,"不会,符合业务需求才是你的老板最想要的." 如何封装一个可以全局调用的vue插件 其原理其实相当简单,通过new Vue(vueCom ...
- Unity 2D游戏开发高速入门第1章创建一个简单的2D游戏
Unity 2D游戏开发高速入门第1章创建一个简单的2D游戏 即使是如今,非常多初学游戏开发的同学.在谈到Unity的时候.依旧会觉得Unity仅仅能用于制作3D游戏的. 实际上.Unity在2013 ...
- Numpy怎样给数组增加一个维度
Numpy怎样给数组增加一个维度 背景:很多数据计算都是二维或三维的,对于一维的数据输入为了形状匹配,经常需升维变成二维 需要:在不改变数据的情况下,添加数组维度:(注意观察这个例子,维度变了,但数据 ...
- Unity3D 创建一个简单的2D游戏
开始研究Unity3d 中的2D游戏. 首先创建出一个项目: 然后创建出一个场景: 然后添加一个背景: 然后创建一个主人公对象: 可以是自己做的素材,也可以是用unity裁剪的素材, 下面贴出裁剪素材 ...
- 一个基于ES6+webpack的vue小demo
上一篇文章<一个基于ES5的vue小demo>我们讲了如何用ES5,vue-router做一个小demo,接下来我们来把它变成基于ES6+webpack的demo. 一.环境搭建及代码转换 ...
- 快速构建一个简单的单页vue应用
技术栈 vue-cli webpack vux,vux-loader less,less-loader vue-jsonp vue-scroller ES6 vue-cli:一个vue脚手架工具,利用 ...
- 一个极其简易版的vue.js实现
前言 之前项目中一直在用vue,也边做边学摸滚打爬了近一年.对一些基础原理性的东西有过了解,但是不深入,例如面试经常问的vue的响应式原理,可能大多数人都能答出来Object.defineProper ...
- 一个域名下多个Vue项目
公司写的网站要英文和中文的,所以就写了两个项目,都是用vue写的单页面项目,但是域名只有一个,所以就想把两个vue项目合并到一个域名下面.思考:vue的页面都是单页面应用,说白了就是一个index.h ...
随机推荐
- 津津的储蓄计划 2004年NOIP全国联赛提高组
题目描述 Description 津津的零花钱一直都是自己管理.每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同. 为了让津津学习如何储蓄,妈妈提出,津津可以 ...
- 利用rsync如何同步单个文件
rsync -vzrtopg --progress --include-from=/home/test/include.list --exclude=/* root@192.168.30.179::b ...
- JLOI2018 记
2018JL省选记 又是一年省选.今年的我,依然好菜啊... [Day 0] 呼...好紧张,明天就省选了.下周就有学长退役了吧,机房又该恢复冷清了吧.只剩下为数不多的几个i7接送着来来往往的OIer ...
- [poj1062]昂贵的聘礼_最短路_离散化
昂贵的聘礼 poj-1062 题目大意:原文链接?不是英文题,自己看 注释:$1\le N \le 100$. 想法:开始的想法有些过于简单,因为落下了一个条件:就是等级限制是一条路径上的任意两点而不 ...
- 计算机与linux操作系统的发展
一.计算机 (一)计算机的概念 1.概念:计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能.是能够按照程序运行,自动.高速 ...
- hibernate分表保存日志
@Service("accessLogService")@Transactionalpublic class LogMessageServiceImpl extends BaseD ...
- NTP-网络时间协议
前言 搭建了一个linux虚拟机,发现跑着跑着时间有差异,查资料发现这个是正常的,因为系统时间和硬件时间是本地时间,会因各种原因导致跟标准时间UTC时间有差异,所以计算机界的牛人发明了NTP协议,专门 ...
- [vagrant]第一次安装添加box出现问题汇总
1.本地文件要加全文件名和协议file:/// 2.The box failed to unpackage properly. Please verify that the box file you' ...
- ORACLE-017:SQL优化-is not null和nvl
今天在优化一段sql,原脚本大致例如以下: select a.字段n from tab_a a where a.字段2 is not null; a.字段2添加了索引的,可是查询速度很慢. 于是做了例 ...
- golang LMDB入门例子——尼玛,LMDB的文档真的是太少了
使用的是这个库:https://github.com/szferi/gomdb 安装: go get github.com/szferi/gomdb 代码: package main import ( ...