HTML5 canvas游戏工作原理
HTML5已经不是一个新名词。它看上去很cool,有很多feature,大多数人普遍看好它的发展。对于我来说,最感兴趣的是它的canvas标签,可以结合Javascript来绘制游戏画面。
我们可以在Javascript脚本中获得页面中的canvas对象,以及它的绘图上下文:
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d")
通常每个游戏会有游戏循环:
var FPS = 30;
setInterval(function() {
update();
draw();
}, 1000/FPS);
每次循环的时候会先执行游戏逻辑,计算对象,更新场景。比如说场景里有个对象在做自由落体运动。你就需要不断地计算并更新它的位移,速度。
function update () {
o.y += o.y_speed;
o.y_speed += o.y_acceleration;
}
更新完场景后需要擦除并重新绘制场景。

function draw() {
context.fillStyle = '#000000';
context.fillRect(0, 0, canvas.width, canvas.height);
context.fillStyle = '#2222ff';
context.fillRect(o.x - o.width/2, o.y - o.height/2, o.width, o.height);
}

更新和绘制场景的速度可能会影响到FPS。
接下来,我们可以添加事件处理,比如说让游戏响应用户鼠标点击事件:
document.onclick = function(event){
o.x = event.pageX - canvas.offsetLeft;
o.y = event.pageY - canvas.offsetTop;
o.y_speed = 0;
}
这样就形成了显示-动作-反馈的closed loop。
这些是最基本的游戏工作原理。当然我们知道要完成一个游戏是有很多工作需要做的,涉及到很多领域。先表过不提。接下去我会谈一下如何使用Selenium和 openCV对HTML5 canvas游戏进行自动化功能测试。
HTML5 canvas游戏工作原理的更多相关文章
- 简单的HTML5 canvas游戏工作原理
HTML5已经不是一个新名词.它看上去很cool,有很多feature,大多数人普遍看好它的发展.对于我来说,最感兴趣的是它的canvas标签,可以结合Javascript来绘制游戏画面. 我们可以在 ...
- 使用Selenium和openCV对HTML5 canvas游戏进行自动化功能测试(一)
上一篇讲了HTML5 canvas游戏的基本工作原理,接下来讲如何进行自动化功能测试. Selenium是一个跨平台的跨浏览器的对网页进行自动化测试的工具.从Selenium 2.0开始Seleniu ...
- HTML5 Canvas游戏开发实战 PDF扫描版
HTML5 Canvas游戏开发实战主要讲解使用HTML5 Canvas来开发和设计各类常见游戏的思路和技巧,在介绍HTML5 Canvas相关特性的同时,还通过游戏开发实例深入剖析了其内在原理,让读 ...
- 开源HTML5 Canvas游戏Runtime发布
Cantk-Runtime是通用的HTML5 Canvas 2D游戏引擎运行库,让HTML5游戏的性能飞起来.Cantk-Runtime以PhoneGap插件的方式提供,从此结束PhoneGap低性能 ...
- HTML5 Geolocation API工作原理[转载]
大家都知道,HTML5 Geolocation 可以使用 IP 地址.基于 Web 的数据库.无线网络连接和三角测量或 GPS 技术来确定经度和纬度. 问题: 在一个基于地理位置服务的个人业余项目(小 ...
- HTML5 Canvas游戏开发(三)lufylegend开源库件(上)
lufylegend可以解决HTML5开发游戏中会遇到的一些问题: 1.各种浏览器对于JavaScript和HTML的解析是不一致的. 2.手机浏览器和PC浏览器的区别. 3.JavaScript并非 ...
- HTML5 Canvas游戏开发(四)lufylegend开源库件(下)
一.文本 LTextField对象是lufylegend库件中专门用于显示文本信息的一个对象. 1.文本属性 创建的文本框对象不会自动加入可视化对象列表中.只有手动调用addChild()方法才能使它 ...
- HTML5 Canvas游戏开发(二)高级功能
一.变形 1.放大和缩小 scale(X,Y)函数. 当使用该函数时,其起始坐标值也被放大或缩小.当X.Y为负值时,可以实现翻转. 2.平移变换 translate(X,Y)函数. 表示水平方向向左移 ...
- HTML5 Canvas游戏开发(一)基础知识
一.绘制基本图形 在每次用canvas画布时,都有几步是“套路” 1.在HTML中创建Canvas画布: <canvas id="mycanvas" width=" ...
随机推荐
- C 语言boolean 值判断
printf("%d\n", !0); 1 1 printf("%d\n", !0); #include <std ...
- python字符串前带u,r,b的含义
1. https://www.cnblogs.com/yanglang/p/7416889.html 2.https://blog.csdn.net/teavamc/article/details/7 ...
- jenkins 邮箱配置---腾讯企业邮箱
一,简单设置 1.登陆jenkins--> 系统管理 ---> 系统设置 2.邮箱就是发送者的邮箱,密码是登陆邮箱的密码 3.设置完以后,可以点击‘test configuration’, ...
- Elasticsearch5.x Head插件安装
在5.0版本中不支持直接安装head插件,需要启动一个服务. 由于head插件本质上还是一个nodejs的工程,因此需要安装node,使用npm来安装依赖的包.(npm可以理解为maven) 1.安装 ...
- gparted 不能起作用的时候,用fdisk
我用的是vmware,从网上下载的centos 6.3版本,通过yum update,其最后更新为6系列的最终版本6.7. 没有仔细看磁盘空间,因为某种原因,为了远程登录,我安装了xfce4桌面,后来 ...
- iOS 开发笔记-控制器tab切换view显示
在开发过程中,我们常常会碰到一种情况就是,在一个controller里面,经常要放很多复杂的控制,最常用的就是tar切换.tar切换,原理就是在一个controller里面,显示另一个controll ...
- cocos2d-x getParent() 获得一个父类的一个node型指针,转换为父类类型
void CenterLayer::zhanzheng(CCObject* pSender){ ((GameScene*)this->getParent())->showLayer(Gam ...
- 编写一种递归方法,它返回数N的二进制中表示1的个数。
/** * 编写一种递归方法,它返回数N的二进制中表示1的个数.利用这样一个事实:N为奇数,其1的个数为N/2的二进制中1的个数加1. * @author wulei * */public class ...
- Python记录7:函数3,函数对象
#函数对象指的是:函数的内存地址可以像变量值一样去使用,如何使用?def func(): print('from func')#1. 可以被引用# f=func# print(f)# f() #2. ...
- caffe-ssd的GPU安装时make runtest报错: BatchReindexLayerTest/3.TestGradient, where TypeParam = caffe::GPUDevice<double>
报错原因:装了两个cuda,BatchReindexLayerTest/3.TestGradient不能确定用那个 解决办法1:删除其中一个(最好删除9.1,TensorFlow支持的是9.0,为了后 ...