写在前面

Github: https://github.com/AlloyTeam/AlloyGameEngine

HTML 5新增了progress标签,那么再去使用AlloyRenderingEngine去模拟进度条是否多余?
不多余。有四大好处:

  • 样式更加灵活(想怎么绘制就怎么绘制)
  • 跨平台跨浏览器样式更加统一(使用便签,各个浏览器默认样式是五花八门)
  • 效果更加酷炫,(比如燃烧的进度条= =!)
  • 像素能够统一管理

统一像素管理的好处:

  • 更容易的全尺寸缩小和放大(最常见的:全屏游戏)
  • 缩小和放大不用操心内部元素错位(只是交给浏览器去进行插值运算)
  • 更好的滤镜控制(如游戏中死亡画面,全屏黑白化)
  • 更好的移植性和跨平台性(opengl<->canvas2d<->webgl<->opengl等等各种mapping)

上面所列的,对AlloyRenderingEngine所有组件都适用。

演示

开始演示(ps:可以直接点击进度条黑色部分设置进度)

组件使用

; (function () {
//注意:当要渲染文字(Text)和图形(Graphics)时,请使用Cavnas渲染
//Progress组件内部使用了Graphics
//第二个参数true代表关闭webgl,使用Canvas2d渲染
//如果要使用webgl渲染,请使用Lable渲染文字,Shape渲染矢量图。
var stage = new ARE.Stage("#ourCanvas", true);
var progress = new ARE.Progress({
width: 200,
height: 20,
borderColor: "#3d3d3d",
fillColor: "#black"
})
progress.x = 50;
progress.y = 50;
stage.add(progress);
var current = 0, pause = true;
stage.onTick(function () {
if (!pause) {
current += 0.005;
progress.value = current;
}
});
//进度条的over时,鼠标的形状
progress.cursor = "pointer";
progress.onClick(function (evt) {
//注意这里可以使用evt.stageX来得到相对于舞台(Canvas)的偏移
current = progress.value = (evt.stageX - progress.x) / progress.width;
})
var btn = document.querySelector("#progressBegin");
//点击按钮,开始进度条开始运行
btn.addEventListener("click", function () {
pause = false;
}, false);
})();

组件原理(看注释)

; (function () {
//先把要使用类的赋给临时变量,以后就不用打点了:)
var Stage = ARE.Stage, Container = ARE.Container, Graphics = ARE.Graphics;
//进度条继承自容器
ARE.Progress = Container.extend({
//构造函数
ctor: function (option) {
//把容器的属性和方法搞给自己
this._super();
this.width = option.width;
this.height = option.height;
this.fillColor = option.fillColor;
this.value = option.value||0;
//外层边框
this.box = new Graphics()
//直接根据传进的宽和高画个矩形
this.box.lineWidth(2).strokeStyle(option.borderColor || "black").strokeRect(0, 0, option.width, option.height);
//把边框添加到自身(因为自身就是容器,继承自Container,所以有了add方法)
this.add(this.box);
var barWidth = this.value * option.width - 4;
this.bar = new Graphics();
//把bar添加到自身(因为自身就是容器,继承自Container,所以有了add方法)
this.add(this.bar);
this.bar.fillStyle(option.fillColor || "green").fillRect(2, 2, barWidth = 1) {
//通过maxCount限制粒子的个数,达到关闭火焰的效果
this.pilot.maxCount = 0;
this.value = 1;
} else {
this.pilot.maxCount = 50;
this.value = value;
}
//设置火焰的位置
this.pilot.x = this.value * this.width;
var barWidth = this.value * this.width - 4;
this.bar.clear().fillStyle(this.fillColor || "green").fillRect(2, 2, barWidth

最新动态请关注Github: https://github.com/AlloyTeam/AlloyGameEngine

AlloyRenderingEngine燃烧的进度条的更多相关文章

  1. Android -- 真正的 高仿微信 打开网页的进度条效果

    (本博客为原创,http://www.cnblogs.com/linguanh/) 目录: 一,为什么说是真正的高仿? 二,为什么要搞缓慢效果? 三,我的实现思路 四,代码,内含注释 五,使用方法与截 ...

  2. css3圆形百分比进度条的实现原理

    原文地址:css3圆形百分比进度条的实现原理 今天早上起来在查看jquery插件机制的时候,一不小心点进了css3圆形百分比进度条的相关文章,于是一发不可收拾,开始折腾了... 关于圆形圈的实现,想必 ...

  3. 图解CSS3制作圆环形进度条的实例教程

    圆环形进度条制作的基本思想还是画出基本的弧线图形,然后CSS3中我们可以控制其旋转来串联基本图形,制造出部分消失的效果,下面就来带大家学习图解CSS3制作圆环形进度条的实例教程 首先,当有人说你能不能 ...

  4. 超炫的HTML5粒子效果进度条 VS 如何规范而优雅地code

    最近瞎逛的时候发现了一个超炫的粒子进度效果,有多炫呢?请擦亮眼镜!   // _this.ch){ _this.particles.splice(i, 1); } }; this.Particle.p ...

  5. WPF自定义控件第一 - 进度条控件

    本文主要针对WPF新手,高手可以直接忽略,更希望高手们能给出一些更好的实现思路. 前期一个小任务需要实现一个类似含步骤进度条的控件.虽然对于XAML的了解还不是足够深入,还是摸索着做了一个.这篇文章介 ...

  6. python实现一个控制台下的进度条

    今天写练习爬虫感觉很需要个进度条,就随手用函数实现了一个,到了晚上突然感觉到这个东西应该单独写出来以后肯定用用得着. 代码也很简单,我就不细讲了,直接上代码了. 测试代码: instance.py i ...

  7. 【Win 10 应用开发】通过数据绑定更新进度条

    实现 INotifyPropertyChanged 接口可以在属性更改后通知数据的使用者,这个相信大伙儿都知道.于是,有朋友会问:对于要实时显示进度的情况,比如更新进度条,能用这个实现吗? 当然是可以 ...

  8. springMVC+ajax 文件上传 带进度条

    前端代码: <form id= "uploadForm"> <p >指定文件名: <input type="text" name= ...

  9. 【Android】 修复ijkPlayer进行m3u8 hls流播放时seek进度条拖动不准确的问题

    项目中使用的播放器是ijkPlayer,发现播放切片特点的hls流(m3u8格式的视频)拖动seekBar的时候会莫名的跳转或者seek不到准确的位置,发现网友也遇到了同样的问题,ijk的开发者也说明 ...

随机推荐

  1. Linux3 在VMware中搭建CentOS6.5虚拟机

    前言:      本文主要是我在大家hadoop集群之前 ,需啊先安装CentOS虚拟机,记录在此,作为参考.如果能帮助到其他人,自然是更好啦. =========================== ...

  2. Cowboy 开源 WebSocket 网络库

    Cowboy.WebSockets 是一个托管在 GitHub 上的基于 .NET/C# 实现的开源 WebSocket 网络库,其完整的实现了 RFC 6455 (The WebSocket Pro ...

  3. 简述 OAuth 2.0 的运作流程

    本文将以用户使用 github 登录网站留言为例,简述 OAuth 2.0 的运作流程. 假如我有一个网站,你是我网站上的访客,看了文章想留言表示「朕已阅」,留言时发现有这个网站的帐号才能够留言,此时 ...

  4. .NET开发邮件发送功能的全面教程(含邮件组件源码)

    今天,给大家分享的是如何在.NET平台中开发“邮件发送”功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1)         邮件基础理论知识 2)         ...

  5. linux笔记

    1 动态查看日志 tail -f filename tail -1000f filename 2 解压当前目录内容为xxx.zip  zip -r xxx.zip ./* 3 查看内存使用情况 fre ...

  6. 修改策略组/注册表 屏蔽Win10升级解决方法

    一.Windows非家庭版 第1步:按Win+R键调出运行对话框,输入命令“gpedit.msc”,按回车键启动组策略编辑器. 第2步:依次定位到“计算机配置→管理模板→Windows组件→Windo ...

  7. myeclipse 无法启动 java.lang.IllegalStateException: Unable to acquire application service. Ensure that the org.eclipse.core.runtime bundle is resolved and started (see config.ini).

    把myeclipse10 按照目录完整拷贝到了另外一台电脑, 另外的目录 原安装目录 D\:\soft\i\myeclipse10 新安装目录 E\:\soft\myeclipse10 双击启动失败, ...

  8. hadoop2.7.1 HA安装部署(转)

    hadoop集群规划 目标:创建2个NameNode,做高可用,一个NameNode挂掉,另一个能够启动:一个运行Yarn,3台DataNode,3台Zookeeper集群,做高可用. 在 hadoo ...

  9. 了解HTML图像

    img <img>表示image图像,从技术上讲,<img>标签并不会在网页中插入图像,而是从网页上链接图像.<img> 标签创建的是被引用图像的占位空间. [必须 ...

  10. 前端学HTTP之代理

    前面的话 Web代理(proxy)服务器是网络的中间实体,位于客户端和服务器之间,扮演“中间人”的角色,在各端点之间来回传送HTTP报文.本文将介绍HTTP代理服务器相关内容 中间实体 Web上的代理 ...