写在前面

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

属于AlloyGameEngine下的一个子项目,负责渲染。

因为游戏===复杂的App,所有AlloyGameEngine不仅可以做游戏,也可以制作App,比如: http://kmdjs.github.io/ppt-editor/

用AlloyGameEngine制作App,如大炮轰蚊子。

建立html节点

要使用AlloyRenderingEngine,你的html页面首先要有一个canvas标签作为渲染容器。如下面html结构:

<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<canvas width="480" height="480"></canvas>
<script src="http://alloyteam.github.io/AlloyGameEngine/are.min.js"></script>
<script>
;(function () {
//在这里写你的app/game的逻辑
})();
</script>
</body>
</html>

你可以直接使用:are.min.js

或者使用这份未压缩的:are

创建舞台

使用下面代码创意舞台

; (function () {
var Stage = ARE.Stage; var stage = new Stage("#ourCanvas");
//或者
//var stage = new Stage(document.getElementById("ourCanvas"));
//或者
//var stage = new Stage(document.querySelector("#ourCanvas"));
})();

以上三种方式都行,Stage的构造函数接受dom元素或者dom选择器。

以后所有要绘制/渲染的元素以后都是通过add方法添加到舞台即可。

画图片

你不需要了解任何渲染知识,你要渲染物体,只需要调用stage.add(xxx)方法,AlloyRenderingEngine会负责帮你画上去。

碰到最多的情况是渲染一张图片。这里要使用引擎自带的Bitmap对象。如:

var Stage = ARE.Stage, Bitmap = ARE.Bitmap;

var stage = new Stage("#ourCanvas");
var bitmap = new Bitmap("atlogo.png");
stage.add(bitmap);

当然你要保证在你的同级目录下有一种atlogo.png图片。

Bitmap构造函数可以接受两种类型的参数,一种是上面所示的字符串路径,一种是Image对象。

当接收字符串路径的时候,引擎会自动去帮你加载图片。

事件绑定

canvas相对于svg的弱点之一是事件绑定。但是,如果通过引擎将dom上的事件过渡给canvas内部的元素,那么这个弱点就没有了。

比如,我们可以轻松给这张图绑定点击事件:

var Stage = ARE.Stage, Bitmap = ARE.Bitmap;

var stage = new Stage("#ourCanvas");
var bitmap = new Bitmap("atlogo.png");
bitmap.onClick(function () {
alert("你点击我了");
})
stage.add(bitmap);

事件触发是精确到像素级别的,如果在移动端使用该引擎,像素级别就没有意义,而且体验不好,所以支持AABB级别事件触发和像素级别任意切换,

这个在以后的文章中再讲。

变形变幻

添加到舞台的任何对象都可以变形变幻。你可以设置如下属性:

  • x

    代表x坐标
  • y

    代表y坐标
  • rotation

    代表旋转
  • scaleX

    代表x方向缩放
  • scaleY

    代表y方向缩放
  • alpha

    代表透明度
  • skewX

    代表x方向扭曲
  • skewY

    代表y方向扭曲
var Stage = ARE.Stage, Bitmap = ARE.Bitmap;

var stage = new Stage("#ourCanvas");
var bitmap = new Bitmap("atlogo.png");
bitmap.onClick(function () {
bitmap.scaleX = bitmap.scaleY = 2;
alert("我变大企鹅啦!");
})
stage.add(bitmap);

旋转点

舞台上的Bitmap默认的旋转基准点是左上角。你可以通过originX和originY设置旋转基准点,他们的值是0到1之间,如下面代码:

bitmap.originX = 0.5;
bitmap.originY = 0.5;

旋转点就变到了中心。设置对象的x和y坐标的时候,就等于设置图片中心的坐标了。

循环

引擎提供了onTick方法来代替js的setInterval来管理循环。

stage.onTick(function () {
//循环执行的逻辑写在这里
})

滤镜

如果想对图片做一些处理,可以改变元素的filter的属性。

bmp.filter=[1, 0, 0, 1];

把数组对象赋值给filter,分别代表rgba,如上面的滤镜,把图片的g和b都过滤掉了。只剩下r。

综合案例

要实现下面的效果:

可以使用下面的代码:

<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<canvas width="480" height="480" id="ourCanvas"></canvas>
<script src="http://alloyteam.github.io/AlloyGameEngine/are.min.js"></script>
<script>
; (function () {
var Stage = ARE.Stage, Bitmap = ARE.Bitmap;
var bmp, stage = new Stage("#ourCanvas");
bmp = new Bitmap("atLogo.png");
//旋转点设置到中心
bmp.originX = 0.5;
bmp.originY = 0.5;
bmp.x = 240;
bmp.y = 240;
//绑定点击事件
bmp.onClick(function () {
//滤镜
bmp.filter = [Math.random(), Math.random(), Math.random(), 1];
});
//添加到舞台
stage.add(bmp); var step = 0.01;
//循环
stage.onTick(function () {
bmp.rotation += 0.5;
if (bmp.scaleX > 1.5 || bmp.scaleX < 0.5) {
step *= -1;
}
bmp.scaleX += step;
bmp.scaleY += step;
});
})();
</script>
</body>
</html>

线上demo: http://alloyteam.github.io/AlloyGameEngine/tutorial/lesson1.html

Github

https://github.com/AlloyTeam/AlloyGameEngine 据说star一下不会怀孕= =!多谢支持!

AlloyRenderingEngine入门的更多相关文章

  1. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  2. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  3. Oracle分析函数入门

    一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...

  4. Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数

    上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...

  5. Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数

    上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...

  6. Angular2入门系列教程4-服务

    上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...

  7. wepack+sass+vue 入门教程(三)

    十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...

  8. wepack+sass+vue 入门教程(二)

    六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...

  9. wepack+sass+vue 入门教程(一)

    一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...

随机推荐

  1. Angular使用$compile为从Ajax加载的HTML绑定ng-click事件

    这是一个Angular使用$compile为从Ajax加载的HTML绑定ng-click事件的实现方式,由于近期忙碌,就先放代码.代码如下: <table data-ng-table=" ...

  2. 巧用Ajax的beforeSend 提高用户体验

    jQuery是经常使用的一个开源js框架,其中的$.ajax请求中有一个beforeSend方法,用于在向服务器发送请求前执行一些动作.具体可参考jQuery官方文档:http://api.jquer ...

  3. Sql Server系列:键和约束

    1 约束的类型 约束可以分为3大类:实体约束.域约束和参照完整性约束. 1.1 实体约束 实体约束都是关于比较行的,实体约束并不关心整体列中的数据,它只对特定行感兴趣. 1.2 域约束 域约束处理一个 ...

  4. 从零学java--传智播客

    java的输入需要引用Scanner包 import java.util.Scanner; class ScannerDemo{ public static void main(String[] ar ...

  5. 浏览器内核、渲染引擎、js引擎

    [1]定义 浏览器内核分成两部分渲染引擎和js引擎,由于js引擎越来越独立,内核就倾向于只指渲染引擎 渲染引擎是一种对HTML文档进行解析并将其显示在页面上的工具 [2]常见引擎 渲染引擎: fire ...

  6. ASP.NET MVC之从控制器传递数据到视图四种方式(一)

    前言 本系列开始着手讲述ASP.NET MVC,也算是自己对基础的回顾以及进一步深入学习,保证每天发表一篇该系列文章,关于基本知识则不再叙述,园子有关文章不胜枚举,这一系列若有叙述不当或错误之处,欢迎 ...

  7. VS 2015 Enterprise第二大坑

    前言 继上篇文章之后,你会继续跌进大坑,这个坑困扰我一上午,同时也会让你大跌眼镜,如果你遇到了,那么恭喜你提升自身能力和解决能力的时机到了,当然你可以通过本文继续少走不必要的弯路[我也是无意中发现的捷 ...

  8. YII 的源码分析(二)

    上一篇简单分析了一下yii的流程,从创建一个应用,到屏幕上输出结果.这一次我来一个稍复杂一点的,重点在输出上,不再是简单的一行"hello world",而是要经过view(视图) ...

  9. C# PPT 为形状设置三维效果

    在PPT中,形状是非常重要的元素.3-D形状,立体多元,给人耳目一新的感觉.在幻灯片中添加3-D效果形状,必然会为PPT的整体效果增色不少.为形状设置三维格式时,可设置棱台,轮廓线,表面效果等. 本篇 ...

  10. 《selenium2 Java 自动化测试实战(第二版)》 更新2016.5.3

    java 版来了!! 本文档在<selenium2 Python 自动化测试实战>的基础上,将代码与实例替换为java ,当然,部分章节有变更.这主要更语言本身的特点有关.集合和java下 ...