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=" ...
 
随机推荐
- [django]django 3种返回json方法
			
django 3种返回json方法 1.手动组装字典返回 from django.http import JsonResponse, HttpResponse from django.shortcut ...
 - hash值重写,就是以自己定义的规则来显示hash值
			
未重写hashCode值 重写hashCode后的值
 - DES、RC4、AES等加密算法优势及应用
			
[IT168 技术]1篇文章,1部小说被盗取,全靠维(si)权(bi)捍卫自己的原创权利.程序员捍卫自己珍贵的代码,全靠花式的加密算法.代码加密有多重要?程序员半年做出的产品,盗版者可能半天就能完全破 ...
 - 以太坊中的账户、交易、Gas和区块Gas Limit等概念
			
什么是账户 以太坊账户与我们所知的账户概念有一定相似之处,却又有很大的区别,更不同于比特币中UTXO. 账户分两类: - 外部拥有账户(EOA),也就是普通账户 - 合约账户 普通账户 所谓的普通账户 ...
 - node-rsa 非对称加密和解密
			
使用公钥和私钥的加密和解密: 非对称加密的关键在于 有 公钥 / 私钥用法:a.生成一对公钥私钥b.公钥加密 -> 对应私钥解密c.私钥加密 -> 对应公钥解密 非对称加密的常见应用方式a ...
 - Sklearn的使用
			
初步接触要求时,从上图选自己数据所适用的方法, 首先看数据的样本是否 >50,小于则需要收集更多的数据 然后看问题适合分类.回归.聚类.降维中的哪一大类 Sklearn解决问题的一般步骤: 1. ...
 - 24.form表单提交的六种方式
			
form表单提交方式 1.无刷新页面提交表单 表单可实现无刷新页面提交,无需页面跳转,如下,通过一个隐藏的iframe实现,form表单的target设置为iframe的name名称,form提交目标 ...
 - LeetCode118.杨辉三角
			
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 5 输出: [ [1], [1,1], [1,2,1], [ ...
 - https加密过程
			
https加密完整过程 step1: “客户”向服务端发送一个通信请求 “客户”->“服务器”:你好 step2: “服务器”向客户发送自己的数字证书.证书中有一个公钥用来加密信息,私钥由“服务 ...
 - DX9 顶点缓存案例
			
// @time 2012.3.5 // @author jadeshu //包含头文件 #include <Windows.h> #include <d3d9.h> #pra ...