快速入口

不读文章可以直接拐向这里:

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开门大吉的更多相关文章

  1. css学习_css3过渡

    1.css3过渡 注意:记住多属性设置的方式:若把过渡写在了hover里面的话鼠标移走时不会有过渡效果!:不同属性同时变时用  all 就可以实现了. 2.css3  transform属性 1.移动 ...

  2. 两分钟观看 nodejs、 iojs、 npmjs 之间的狗血剧情

    开门大吉,欢迎光临.这是 乐玩nodejs npm工具库 微信公众号的第一篇文章,那就先来说说 nodejs/npm 的小秘密,话不多说,赶快开始: 通过一个时间线简要描述下 2008 年 V8 引擎 ...

  3. AlloyRenderingEngine燃烧的进度条

    写在前面 Github: https://github.com/AlloyTeam/AlloyGameEngine HTML 5新增了progress标签,那么再去使用AlloyRenderingEn ...

  4. AlloyRenderingEngine文本框组件

    写在前面 Github: https://github.com/AlloyTeam/AlloyGameEngine 在dom元素里,自带了input标签,设置其type为text,它就是一个文本框. ...

  5. AlloyRenderingEngine继承

    写在前面 不读文章,只对代码感兴趣可以直接跳转到这里 https://github.com/AlloyTeam/AlloyGameEngine然后star一下,多谢支持:). 前几天发了篇向ES6靠齐 ...

  6. AlloyRenderingEngine之Shape

    写在前面 不读文章,只对代码感兴趣可以直接跳转到这里 https://github.com/AlloyTeam/AlloyGameEngine 然后star一下,多谢支持:). 游戏或者应用中,不是所 ...

  7. AlloyRenderingEngine入门

    写在前面 AlloyRenderingEngine是一款非常快速的渲染引擎,目前该项目已经合并至 https://github.com/AlloyTeam/AlloyGameEngine/ , 属于A ...

  8. CSS3实现开门动画

    <!DOCTYPE html> <html lang="en"> <head>  <meta charset="UTF-8&qu ...

  9. HDUOJ----1234 开门人和关门人(浙江大学考研题)

    开门人和关门人 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

随机推荐

  1. angular-ui分页组件

    http://angular-ui.github.io/bootstrap/#/pagination 分页组件只提供生成分页按钮,数据的显示需要使用ng-repeat, 注意设置 items-per- ...

  2. SQL注入

    @org.junit.Test public void testLogin() { CardDAO cd=new CardDAO(); if(cd.dengru("' or 1 = 1--& ...

  3. java获取类的信息

    关键技术剖析 1.java.lang.reflect包实现了java的反射机制,在使用反射机制时,需要导入该包. 2.Class类的forName方法能够根据类名加载类,获得类的Class对象. Cl ...

  4. [ASP.NET] 如果将缓存“滑动过期时间”设置为1秒会怎样?

    今天编写了一个采用ASP.NET Caching的组件,在为它编写Unit Test的过程中发现了一个有趣的问题,接下来我通过一个简单的实例说明这个问题.我们在一个控制台应用中编写了如下一段程序,这个 ...

  5. 外网访问原理分析 - 每天5分钟玩转 OpenStack(105)

    本节我们会将上节创建的 ext_net 连接到 router,并验证内外网的连通性. 更重要的,我们会分析隐藏在表象之下的原理. 将外网连接到 Neutron 的虚拟路由器,这样 instance 才 ...

  6. 【记录】Install-Package : “Unity”已拥有为“CommonServiceLocator”定义的依赖项。

    在使用 NuGet 安装 Unity 的时候,安装命令:install-package unity. 但是会莫名奇妙的报如下错误: “Unity”已拥有为“CommonServiceLocator”定 ...

  7. mysql乐观锁总结和实践--转

    原文地址:http://chenzhou123520.iteye.com/blog/1863407 上一篇文章<MySQL悲观锁总结和实践>谈到了MySQL悲观锁,但是悲观锁并不是适用于任 ...

  8. WebGIS中GeoHash编码的研究和扩展

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 1.1普通地理编码流程 将采集的POI入库后,数据库里保存有 ...

  9. 【JUC】JDK1.8源码分析之CyclicBarrier(四)

    一.前言 有了前面分析的基础,现在,接着分析CyclicBarrier源码,CyclicBarrier类在进行多线程编程时使用很多,比如,你希望创建一组任务,它们并行执行工作,然后在进行下一个步骤之前 ...

  10. 【JUC】JDK1.8源码分析之Semaphore(六)

    一.前言 分析了CountDownLatch源码后,下面接着分析Semaphore的源码.Semaphore称为计数信号量,它允许n个任务同时访问某个资源,可以将信号量看做是在向外分发使用资源的许可证 ...