AlloyRenderingEngine开门大吉
快速入口
不读文章可以直接拐向这里:
github:https://github.com/AlloyTeam/AlloyRenderingEngine
website:http://alloyteam.github.io/AlloyRenderingEngine/
api:http://alloyteam.github.io/AlloyRenderingEngine/doc/
开门大吉
每次输入kmdj输入法自动提示【开门大吉】,输入kmdjs提示【开幕倒计时】,所以说kmdjs不仅仅是满满的血腥味
(kill all module define lib/framework, kill amd and cmd),还有着美好的寓意。
一定要提kmdjs是因为AlloyRenderingEngine是基于kmdjs进行模块化开发(其实使用kmdjs已经没有模块的概念了),只要class和namespace。
kmdjs的核心的核心就是{},class全部挂在 {}上。{}属于namespace。所以很自然而然得轻松实现循环依赖。当然kmdjs还有很多优点,如:
- 支持依赖可视
- 支持循环依赖
- 支持命名重复
- 支持压缩打包
- 支持代码美化
- 支持远程加载
- 支持延迟加载
- 支持模块共享
- 支持平铺依赖
- 支持断点调试
- 支持独立打包
- 支持一键下载
github:https://github.com/kmdjs/kmdjs
再造轮子
看过一些flash团队的html5开源项目,也读了读很多opengl转webgl的工程师的游戏引擎教程,他们视野够广,图形方面经验也很丰富,
但是项目的组织架构千奇百怪,一个人一个花样,一个团队一个花样。所以,kmdjs要出手了(当然也可以认为又多了一个新花样,
当至少是我觉得很满意、很清晰简洁的花样),去组织每一行没有归宿感的js代码。
目录结构
先看顶级目录结构
再看build里的目录结构
其中main.js:
kmdjs.config({
name: "BuildARE",
baseUrl: "../src",
classes: [
{ name: "ARE.DisplayObject", url: "are/display" },
{ name: "ARE.Bitmap", url: "are/display" },
{ name: "ARE.Sprite", url: "are/display" },
{ name: "ARE.Stage", url: "are/display" },
{ name: "ARE.Shape", url: "are/display" },
{ name: "ARE.Container", url: "are/display" },
{ name: "ARE.Txt", url: "are/display" },
{ name: "ARE.Matrix2D", url: "are/util" },
{ name: "ARE.Loader", url: "are/util" },
{ name: "ARE.UID", url: "are/util" },
{ name: "ARE.CanvasRenderer", url: "are/renderer" },
{ name: "ARE.WebGLRenderer", url: "are/renderer" },
{ name: "ARE.GLMatrix", url: "are/util" },
{ name: "ARE.RAF", url: "are/util" },
{ name: "ARE.FPS", url: "are/util" },
{ name: "ARE.Particle", url: "are/display" },
{ name: "ARE.Util", url: "are/util" },
{ name: "ARE.Vector2", url: "are/util" },
{ name: "ARE.ParticleSystem", url: "are/display" }
]
});
define("Main", ["ARE"], {
ctor: function () {
this instanceof DisplayObject;
this instanceof Bitmap;
this instanceof Sprite;
this instanceof Stage;
this instanceof Shape;
this instanceof Container;
this instanceof Txt;
this instanceof Matrix2D;
this instanceof Loader;
this instanceof UID;
this instanceof CanvasRenderer;
this instanceof WebGLRenderer;
this instanceof GLMatrix;
this instanceof RAF;
this instanceof FPS;
this instanceof Particle;
this instanceof Util;
this instanceof Vector2;
this instanceof ParticleSystem;
}
})
ctor是Main的构造函数,也是唯一一个会自动去new的构造函数,其余文件里面difine的class都需要自行去new才能执行。
ctor里面的一大堆instanceof代码主要是为了产生依赖,所以需要合并提取的class都需要写进去。
最后直接打开index就能导出代码。
且看导出后的are.js的最后几行:
if (typeof module != 'undefined' && module.exports && this.module !== module) {
module.exports = ARE
}
else if (typeof define === 'function' && define.amd) {
define(ARE)
}
else {
win.ARE = ARE
};
这样的话,你就可以随意码了,比如:
var stage = new ARE.Stage("#ourCanvas", localStorage.webgl == "1");
var txt = new ARE.Txt({
txt: "Alloy Rendering Engine",
fontSize: 25,
fontFamily: "arial"
});
stage.add(txt);
为了避免打点,js工程师一般这么干:
with (ARE) {
var stage = new Stage("#ourCanvas");
var txt = new Txt({
txt: "Alloy Rendering Engine",
fontSize: 25,
fontFamily: "arial"
});
stage.add(txt);
}
(function (Stage, Txt) {
var stage = new Stage("#ourCanvas");
var txt = new Txt({
txt: "Alloy Rendering Engine",
fontSize: 25,
fontFamily: "arial"
});
stage.add(txt);
})(ARE.Stage, ARE.Txt)
(function (ARE) {
var Stage = ARE.Stage, Txt = ARE.Txt;
var stage = new Stage("#ourCanvas");
var txt = new Txt({
txt: "Alloy Rendering Engine",
fontSize: 25,
fontFamily: "arial"
});
stage.add(txt);
})(ARE)
require(["./ARE"], function (ARE) {
var Stage = ARE.Stage, Txt = ARE.Txt;
var stage = new Stage("#ourCanvas");
var txt = new Txt({
txt: "Alloy Rendering Engine",
fontSize: 25,
fontFamily: "arial"
});
stage.add(txt);
})
define(function (require) {
var ARE = require("./ARE");
var Stage = ARE.Stage, Txt = ARE.Txt;
var stage = new Stage("#ourCanvas");
var txt = new Txt({
txt: "Alloy Rendering Engine",
fontSize: 25,
fontFamily: "arial"
});
stage.add(txt);
})
终于知道js的世界有多混乱了吧?!
写一段程序需要频繁打点是不对的,一是慢,二是麻烦。js工程师为了避免打点几乎绞尽脑汁。
上面是避免打点的一些手段,如果使用kmdjs,妈妈再也不用担心打点了:
define("Main", ["ARE"], {
ctor: function () {
var stage = new Stage("#ourCanvas");
var txt = new Txt({
txt: "Alloy Rendering Engine",
fontSize: 25,
fontFamily: "arial"
});
stage.add(txt);
}
})
Next
这篇主要讲了下目录结构以及kmdjs在are中的作用,还有are的build工具的使用以及模块化的看法,确切说还没有进入主题,甚至跑题,
但是非常重要,待续。
AlloyRenderingEngine开门大吉的更多相关文章
- css学习_css3过渡
1.css3过渡 注意:记住多属性设置的方式:若把过渡写在了hover里面的话鼠标移走时不会有过渡效果!:不同属性同时变时用 all 就可以实现了. 2.css3 transform属性 1.移动 ...
- 两分钟观看 nodejs、 iojs、 npmjs 之间的狗血剧情
开门大吉,欢迎光临.这是 乐玩nodejs npm工具库 微信公众号的第一篇文章,那就先来说说 nodejs/npm 的小秘密,话不多说,赶快开始: 通过一个时间线简要描述下 2008 年 V8 引擎 ...
- AlloyRenderingEngine燃烧的进度条
写在前面 Github: https://github.com/AlloyTeam/AlloyGameEngine HTML 5新增了progress标签,那么再去使用AlloyRenderingEn ...
- AlloyRenderingEngine文本框组件
写在前面 Github: https://github.com/AlloyTeam/AlloyGameEngine 在dom元素里,自带了input标签,设置其type为text,它就是一个文本框. ...
- AlloyRenderingEngine继承
写在前面 不读文章,只对代码感兴趣可以直接跳转到这里 https://github.com/AlloyTeam/AlloyGameEngine然后star一下,多谢支持:). 前几天发了篇向ES6靠齐 ...
- AlloyRenderingEngine之Shape
写在前面 不读文章,只对代码感兴趣可以直接跳转到这里 https://github.com/AlloyTeam/AlloyGameEngine 然后star一下,多谢支持:). 游戏或者应用中,不是所 ...
- AlloyRenderingEngine入门
写在前面 AlloyRenderingEngine是一款非常快速的渲染引擎,目前该项目已经合并至 https://github.com/AlloyTeam/AlloyGameEngine/ , 属于A ...
- CSS3实现开门动画
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&qu ...
- HDUOJ----1234 开门人和关门人(浙江大学考研题)
开门人和关门人 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
随机推荐
- Redux
redux是Flux的一种实现方式,但还是和Flux有些不同. React控制视图层,要想做一个完整的数据流,必须要用react-redux. 官方demo,自己收集了一下: demo1http:// ...
- test markdown
Markdown和Haroopad介绍文档 [TOC "float:right"] 什么是Markdown Markdown 是一种轻量级标记语言,创始人为约翰·格鲁伯(John ...
- IOS 消息机制(NSNotificationCenter)
消息机制 NSNotificationCenter 一直都在频繁使用,但是却对其原理不是十分了解.今天就花些时间,把消息机制原理重头到尾好好过一遍. iOS 提供了一种 "同步的" ...
- HTML5系列:HTML5结构
1. 主体结构元素 在HTML5中,为了使文档的结构更加清晰明确,增加几个与页眉.页脚.内容区块等文档结构相关联的结构元素. 1.1 article元素 article元素表示文档.页面或应用程序中独 ...
- CSS系列:CSS的继承与层叠特性
1. CSS的继承特性 所有的CSS语句都是基于各个标记直接的继承关系,CSS继承是指子标记会继承父标记的所有样式风格,并可以再父标记样式风格的基础上再加以修改,产生新的样式,而子标记的样式完全不会影 ...
- SQL Server游标
什么是游标 结果集,结果集就是select查询之后返回的所有行数据的集合. 游标则是处理结果集的一种机制吧,它可以定位到结果集中的某一行,多数据进行读写,也可以移动游标定位到你所需要的行中进行操作数据 ...
- jQuery-easyui实现关闭全部tabs
有时候当我们打开很多tabs选项卡时,要关闭它只能一个一个的进行关闭,显然太麻烦,这时可以在选项卡的最右边添加一个按钮 实现关闭全部. function openTab(text, url, icon ...
- Dijkstra算法优先队列实现与Bellman_Ford队列实现的理解
/* Dijkstra算法用优先队列来实现,实现了每一条边最多遍历一次. 要知道,我们从队列头部找到的都是到 已经"建好树"的最短距离以及该节点编号, 并由该节点去更新 树根 到其 ...
- 【开源】OSharp框架解说系列(5.2):EntityFramework数据层实现
OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...
- 为 Neutron 准备物理基础设施(I) - 每天5分钟玩转 OpenStack(75)
前面讨论了 Neutron 的架构和基础知识,接下来就要通过实验深入学习和实践了. 第一步就是准备实验用的物理环境,考虑如下几个问题: 需要几个节点? 如何分配节点的角色? 节点上部署哪些服务? 配几 ...