AlloyRenderingEngine之Shape
写在前面
不读文章,只对代码感兴趣可以直接跳转到这里 https://github.com/AlloyTeam/AlloyGameEngine
然后star一下,多谢支持:)。
游戏或者应用中,不是所有的地方都是贴图,Shape 也有很常见的应用场景,如游戏中显示HP的血条。大量的Shape可以组成矢量图。矢量图的好处是放大不失真,也就是不会变模糊;而位图放大失真,失真的程度要看其平台插值算法的牛B程度,但放大效果越好的算法,速度越慢,所以大部分平台会在速度和效果上取个折中。
绘制Shape根绘制位图本质不一样,绘制位图可以充分利用GPU渲染(当然也可以不用),绘制Shape必须经过CPU先进行数学计算和图形学相关算法(比如你可以尝试不使用api,而使用点去绘制贝塞尔曲线、圆形、线条等,你做的所有数学工作,就是计算机做的工作),然后再进行渲染。所以很显然,绘制大量的Shape会造成帧率下降。
那么又想使用Shape,又不想降低帧率怎么办?
绘制Shape和绘制图片又不冲突。Shape可以转成图片进行渲染,跟Shape类似的还有文字,文字也可以转成图片再进行绘制以提高绘制帧率,意思就是:
1.经过CPU先进行数学计算和图形学相关算法
2.渲染至某个备份Canvas
3.以后游戏或者应用中的core loop直接把备份Canvas绘制上去,而不用去重新计算
4.当Shape有更改的时候才去更新备份Canvas
这里需要注意的是:必须知道Shape所占据的宽高。
Shape类
AlloyRenderingEngine内置了Shape类用于绘制几何形状。
其API设计与命名也Canvas的Context2d的一致,不同在与:
1.使用了连缀的方法调用方式,
2.最后要调用end()结尾
3.需要增加到舞台
如入画一个圆:
(function (ARE) {
var Stage = ARE.Stage, Shape = ARE.Shape;
var stage = new Stage("#ourCanvas");
var shape = new Shape(73, 76);
shape.beginPath().arc(10,10,20, 0, Math.PI * 2).fill().end();
stage.add(shape);
})(ARE);
可以看到,创建Shape的实例需要传两个参数,一个代表宽,一个代表高。具体为什么要传这两个参数,请从文章开头重新读一遍:)。
以此类推。其他的方法还有:moveTo、lineTo、bezierCurveTo、stroke、fillStyle、fillRect、clear、clearRect等…
而shape也拥有scale、scaleX、scaleY、skewX、skewY、rotation、x、y、alpha等属性
举个栗子(鼠标放在球上然后滚动你的滚轮试试)
再举个栗子(鼠标放在老虎上然后滚动你的滚轮试试)
滚轮事件怎么搞滴?
stage.onMouseWheel(function (evt) {
if (evt.delta > 0) {
shape.scale += 0.05;
} else {
shape.scale -= 0.05;
}
})
简单吧!
Github
https://github.com/AlloyTeam/AlloyGameEngine
据说star一下不会怀孕= =!多谢支持:)!
AlloyRenderingEngine之Shape的更多相关文章
- AlloyRenderingEngine燃烧的进度条
写在前面 Github: https://github.com/AlloyTeam/AlloyGameEngine HTML 5新增了progress标签,那么再去使用AlloyRenderingEn ...
- AlloyRenderingEngine开门大吉
快速入口 不读文章可以直接拐向这里: github:https://github.com/AlloyTeam/AlloyRenderingEngine website:http://alloyteam ...
- AlloyRenderingEngine
AlloyRenderingEngine燃烧的进度条 写在前面 Github: https://github.com/AlloyTeam/AlloyGameEngine HTML 5新增了progre ...
- OpenCASCADE Shape Location
OpenCASCADE Shape Location eryar@163.com Abstract. The TopLoc package of OpenCASCADE gives resources ...
- Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
- Android GradientDrawable(shape标签定义) 静态使用和动态使用(圆角,渐变实现)
Android GradientDrawable使用优势: 1. 快速实现一些基本图形(线,矩形,圆,椭圆,圆环) 2. 快速实现一些圆角,渐变,阴影等效果 3. 代替图片设置为View的背景 4. ...
- AlloyRenderingEngine文本框组件
写在前面 Github: https://github.com/AlloyTeam/AlloyGameEngine 在dom元素里,自带了input标签,设置其type为text,它就是一个文本框. ...
- AlloyRenderingEngine继承
写在前面 不读文章,只对代码感兴趣可以直接跳转到这里 https://github.com/AlloyTeam/AlloyGameEngine然后star一下,多谢支持:). 前几天发了篇向ES6靠齐 ...
- 浅谈Android样式开发之shape
引言 在Android开发中我们很多情况都是使用图片来展示相关效果,今天我就来详细介绍下Android下使用Shape来进行简单UI的开发.一方面这些是Android开发的基础,另一方面这方面的知识可 ...
随机推荐
- 搭建一套自己实用的.net架构(3)续 【ORM Dapper+DapperExtensions+Lambda】
前言 继之前发的帖子[ORM-Dapper+DapperExtensions],对Dapper的扩展代码也进行了改进,同时加入Dapper 对Lambda表达式的支持. 由于之前缺乏对Lambda的知 ...
- Linux CentOS7通过yum命令安装Mono(尝先安装模式)
前言 经过尝试网上各种安装mono的技术贴,这个安装过程经历了大约2周,尝试了各个版本,几目前博客所描述的所有安装方式.以下内容的安装方式可以为你尝试不同版本的mono.并非正式环境安装标准方式安装. ...
- 吸顶大法 -- UWP中的工具栏吸顶的实现方式之一
如果一个页面中有很长的列表/内容,很多应用都会在用户向下滚动时隐藏页面的头,给用户留出更多的阅读空间,同时提供一个方便的吸顶工具栏,比如淘宝中的店铺页面. 下面是一个比较简单的实现,如果有同学有更好的 ...
- 详解微信开发者文档——5 access_token管理
写在前面的话:前几篇博客详细讲解了如何获取用户发送的消息并进行回复,这里的回复是一种被动的回复,而被动回复的方式便是通过echo返回信息给微信服务器的POST请求,因此,其实我们并没有算的上调用了微信 ...
- 细说websocket - php篇
下面我画了一个图演示 client 和 server 之间建立 websocket 连接时握手部分,这个部分在 node 中可以十分轻松的完成,因为 node 提供的 net 模块已经对 socket ...
- Struts2+Spring+Hibernate框架整合总结详细教程
一.SSH三大框架知识总结 Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2的体系结构与S ...
- .net正则表达式大全(.net 的 System.Text.RegularExpressions.Regex.Match()方法使用)
正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串.正则表达式无疑是处理文本最有力的工具,而.NET的System.dll类库提供的System.Text.RegularExpression ...
- 给 Android 研发的一些的建议
作为应用程序开发人员,我们需要注意在开发应用程序时的一些问题. 这些问题的安全级别是取决于应用程序的类型和使用域. 在这里列举了一些我们在开发中需要注意的一些问题: 开发日志输出相关: 1. 不要在 ...
- JS的Object漫想:从现象到“本质”
转自:http://zzy603.iteye.com/blog/973649 写的挺好,用于记录,把对象分成概念的Object(var f={})和 类的Object(function F(){}) ...
- 锋利的jQuery--编写jQuery插件(读书笔记五)[完结篇]
1.表单验证插件Validation 2.表单插件Form 3.动态事件绑定插件livequery 可以为后来的元素绑定事件 类似于jQuery中的live()方法 4.jQuer ...