随着HTML5标准终于敲定。HTML5将有望成为游戏开发领域的的热门平台。

HTML5游戏能够执行于包含iPhone系列和iPad系列在内的计算机、智能手机以及平板电脑上,是眼下跨平台应用开发的最佳实施方案。

本文系依据[HML5 Canvas游戏开发实战]一书中的内容整理而成,是了解和学习HTML5游戏开发的基础内容,希望能够帮助到那些和博主一样致力于游戏开发的朋友们。

JavaScript中的面向对象编程

对于游戏开发来说,面向对象编程(OOP)是一种重要并且必要的方法。所以在了解HTML5游戏开发前,首先应该了解JavaScript中的面向对象编程。JavaScript是一种基于对象的语言。可它并非一种真正的面向对象的编程语言,由于在JavaScript的语法中不存在类(Class)的概念。以下我们将分析和解决在JavaScript中实现封装、继承等面向对象的问题。

在JavaScript中函数(function)就是就是一个类(class)

//声明一个函数
function MyClass(){}
//实例化一个对象
var cls1 = new MyClass();

使用this关键字就能够为类添加属性

//声明一个类并定义其构造函数
function MyClass(name,age)
{
this.name = name;
this.age = age;
};
//实例化一个对象
var cls1 = new MyClass("张三",20)
//输出cls1的两个属性值
alert("name=" + cls1.name + "&" + cls1.age)

使用prototype属性能够为类加入方法

//声明一个类并定义其构造函数
function MyClass(name,age)
{
this.name = name;
this.age = age;
};
//为MyClass添加方法
MyClass.prototype=
{
toString:function()
{
alert("name=" + this.name + "&" + this.age)
},
getName:function()
{
alert("name=" + this.name)
},
getAge:function()
{
alert("age=" + this.age)
}
};

使用apply方法实现属性和方法的继承

//定义一个父类People
function People()
{
this.type="人"
};
//为父类定义一个方法
People.prototype=
{
getType:function()
{
alert("type=" + this.type)
}
}; //定义一个子类Student
function Student(name,age,sex)
{
//继承父类的属性type
People.apply(this,arguments);
this.name = name;
this.age = age;
this.sex = sex;
}; //声明一个Student实例
var stu = new Student("张三",20,"男");
//输出type
alert(stu.type) //以下我们来了解下怎样继承父类的方法。继承父类方法主要通过循环使用父对象的prototype进行复制来实现,如
//又一次定义子类Student
function Student(name,age,sex)
{
//继承父类的属性type
People.apply(this,arguments);
//继承父类的方法。略显抽象
var prop;
for(prop in People.prototype)
{
var proto = this.constructor.prototype;
if(!proto[prop])
{
proto[prop] = People.prototype[prop];
}
proto[prop]["super"] = People.prototype;
}
//属性定义
this.name = name;
this.age = age;
this.sex = sex;
}; //实例化Student对象
var stu = new Student("张三",20,"男");
stu.getType();

静态类的实现

function staticClass()
{
staticClass.name = "张三";
staticClass.toString=function
{
alert("name=" + staticClass.name )
};
}; alert(staticClass.name);
staticClass.toString();

Canvas画图基础

HTML5提供了图像、视频、音频、表单、位置、本地数据库、离线存储、websocket等各种全新的特性,对于HTML游戏开发而言,我们主要关注图像、音频、本地数据库以及websocket等,首先我们来了解下Canavs画图的基础内容。

Canvas是HTML5为我们提供的一张画布,能够让我们在HTML上直接绘制图形,因此Canvas能够作为HTML5游戏开发的基本元素,即HTML5游戏引擎的底层都是以Canvas元素来驱动的。Canvas本身没有画图的能力,须要借助于JavaScript来实现画图的功能。使用Canvas元素仅仅须要在网页中加入canvas标记就可以。如

<canvas id="myCanavs" width="800" height="480"></canvas>

接下来我们通过JavaScript来获取这个Canvas并通过相关API实现画图环境的初始化

//获取Canvas元素
var canvas = document.getElementById('myCanvas');
//检查canvas合法性
if(canvas && canvas.getContext)
{
//获取当前上下文
var ctx = canvas.getContext('2d')
}

由于眼下Canvas仅仅支持2D画图,因此,这里的參数临时仅仅能为2d。由于Cnavas画图的API都封装在ctx这个实例中,因此以下的全部操作都是基于ctx来实现的:

使用Canvas绘制线

//设置线宽
ctx.lineWidth = 10;
//设置画笔颜色
ctx.strokeStyle = "red";
//创建一个路径
ctx.beginPath();
//路径起点
ctx.moveTo(10,10);
//路径终点
ctx.lineTo(150,50);
//绘制路径
ctx.stroke();

使用Cnavas绘制矩形

//设置线宽
ctx.lineWidth=5;
//设置画笔颜色
ctx.strokeStyle-"red"
//创建路径
ctx.beginPath();
//绘制矩形
ctx.strokeRect(10,10,70,40);

或者

//定义矩形
ctx.rect(10,10,70,40);
//绘制矩形
ctx.stroke();

假设须要对矩形进行填充

//创建路径
ctx.beginPath()
//绘制矩形
ctx.fillRect(10,10,70,40)

使用Canvas绘制圆

//创建路径
ctx.beginPath();
//定义圆
ctx.arc(100,100,50,0,360*Math.PI/180,true);
//绘制圆
ctx.stroke();

相同地。能够使用fill进行填充绘制

//创建路径
ctx.beginPath();
//定义圆
ctx.arc(100,100,50,0,360*Math.PI/180,true);
//绘制圆
ctx.fill();

使用Canvas绘制圆角矩形

绘制圆角矩形须要arcTo函数配合lineTo来完毕

//创建路径
ctx.beginPath();
ctx.moveTo(40,20);
ctx.lineTo(100,20);
ctx.arcTo(100,20,120,40,20);
ctx.lineTo(120,70);
ctx.arcTo(120,90,100,90,20);
ctx.lineTo(40,90);
ctx.arcTo(20,90,100,70,20);
ctx.lineTo(20,40);
ctx.arcTo(20,20,40,20,20);
//绘制圆角矩形
ctx.stroke();

使用Canvas绘制复杂图形

在HTML5中能够通过quadraticCurveTo函数绘制二次贝塞尔曲线,通过bezierCurveTo函数绘制三次贝塞尔曲线,详细代码请參考API文档。

使用Canvas绘制文字

//设置字体
ctx.font="30px Arial";
//绘制文字
ctx.strokeText("Hello HTML5",100,50);

使用Canvas绘制图片

绘制图片使用drawImage函数,其函数原型例如以下:

drawImage(image,dx,dy);

当中image能够是HTML中的标签或者是JavaScript中的Image对象。如

//定义一个img标签
<img id="img_source" src="source.jpg" width="240" height="240"/>

接下来通过getElementById来取得图像数据,并将其绘制出来

var img=document.getElementById("img_source");
ctx.draw(img,200,200);

假设直接使用JavaScript代码

var img=new Image();
img.src="source.jpg";
ctx.draw(img,200,200)

图形的平移操作

使用translate函数实如今水平和垂直方向上的平移

图形的旋转操作

使用rotate函数实现旋转,须要注意的是传入的參数是弧度

图形的伸缩操作

使用scale函数实现伸缩,当參数为负值时表示在该方向上翻转

图形高级特效

这里主要介绍线性渐变、径向渐变、颜色反转、灰度。

线性渐变

//创建一个线性渐变容器
var grd=ctx.createLinearGradient(0,0,200,0);
//加入颜色
grd.addColorStop(0.2,"#00ff00");
grd.addColorStop(0.8,"#ff0000");
//应用渐变
ctx.fillStyle=grd;

径向渐变

//创建一个径向渐变容器
var grd=ctx.createRadialGradient(100,100,10,100,100,50);
//加入颜色
grd.addColorStop(0,"#00ff00");
grd.addColorStop(,"#ff0000");
//应用渐变
ctx.fillStyle=grd;

颜色反转

遍历每一个像素并对RGB值进行取反

灰度

灰度计算公式:gary=red*0.3+green*0.59+blue*0.11

基础的内容就是这些了,以后假设碰到须要HTML5的地方能够回过头来看看。

HTML5游戏开发技术基础整理的更多相关文章

  1. html5游戏开发-零基础开发《圣诞老人送礼物》小游戏

    开言: 以前lufy前辈写过叫“ HTML5游戏开发-零基础开发RPG游戏”的系列文章,在那里面我学习了他的引擎以及了解了游戏脚本.自从看了那几篇文章,我便对游戏开发有了基本的认识.今天我也以零基础为 ...

  2. Html5游戏开发-145行代码完成一个RPG小Demo

    lufy前辈写过<[代码艺术]17行代码的贪吃蛇小游戏>一文,忽悠了不少求知的兄弟进去阅读,阅读量当然是相当的大.今天我不仿也搞一个这样的教程,目地不在于忽悠人,而在于帮助他人. 先看de ...

  3. 【整理】HTML5游戏开发学习笔记(1)- 骰子游戏

    <HTML5游戏开发>,该书出版于2011年,似乎有些老,可对于我这样没有开发过游戏的人来说,却比较有吸引力,选择自己感兴趣的方向来学习html5,css3,相信会事半功倍.不过值得注意的 ...

  4. HTML5游戏开发引擎,初识CreateJS

    CreateJS为CreateJS库,可以说是一款为HTML5游戏开发的引擎.打造 HTML5 游戏,构建新游戏,提供构建最新 HTML5 的技术.你可以通过这个网站学习如何构建跨平台和跨终端游戏.这 ...

  5. HTML5游戏开发进阶指南(亚马逊5星畅销书,教你用HTML5和JavaScript构建游戏!)

    HTML5游戏开发进阶指南(亚马逊星畅销书,教你用HTML5和JavaScript构建游戏!) [印]香卡(Shankar,A.R.)著 谢光磊译 ISBN 978-7-121-21226-0 201 ...

  6. 【转】HTML5游戏开发经典视频教程、电子书汇总

    HTML5游戏开发经典视频教程.电子书汇总 HTML5是用于取代1999年所制定的 HTML 4.01 和 XHTML 1.0 标准的 HTML 标准版本,现在仍处于发展阶段,但大部分浏览器已经支持某 ...

  7. HTML5游戏开发进阶指南

    <HTML5游戏开发进阶指南> 基本信息 作者: (印)香卡(Shankar,A.R.)    译者: 谢光磊 出版社:电子工业出版社 ISBN:9787121212260 上架时间:20 ...

  8. HTML5游戏开发 PDF扫描版​

    很多从事Web前端开发的人对HTML总有些不满,比如需要手动检查和设计很多格式代码,不仅容易出错,而且存在大量重复.好在HTML5让我们看到了曙光.作为下一代Web开发标准,HTML5成为主流的日子已 ...

  9. CutJS – 用于 HTML5 游戏开发的 2D 渲染引擎

    CutJS 是轻量级的,快速的,基于 Canvas 开发的 HTML5  2D 渲染引擎,可以用于游戏开发.它是开源的,跨平台的,与现代的浏览器和移动设备兼容.CutJS 提供了一个类似 DOM 树的 ...

随机推荐

  1. Winbind authentication against active directory

    Winbind authentication against active directory Description This tip will describe how to configure ...

  2. QML之TextEdit

    TextEdit显示一个可编辑的,有格式的文本框.它也可以显示明文和富文本.例如:TextEdit {    width: 240    text: "<b>Hello</ ...

  3. 谈谈python中的 lambda

    最近刚开始学习python,然后要加几个python的群去学习学习,但是呢有个群的申请栏要求写一个用lambda求1-100的和.....然后悲剧的就是不会啊....然后就没有然后了... 所以去网上 ...

  4. OC语言-01类和对象

    // cc 文件名.m -framework Foundation 编译链接 #import <Foundation/Foundation.h> //枚举性别 typedef enum{ ...

  5. Quartz1.8.5例子(一)

    /* * Copyright 2005 - 2009 Terracotta, Inc. * * Licensed under the Apache License, Version 2.0 (the ...

  6. hg vs git :这个世界除了svn还有别的

    最近想用版本控制软件来保存汉化文件,但又觉得SVN太麻烦,于是想到了最近较为流行的分布式版本控制工具.而Git和Mercurial(意思为水银的,于是经常缩写为Hg)自然是其中最为流行的工具.大名鼎鼎 ...

  7. 使用ListItem给DropDownList填充数据

    global::日积月累啥的啊.DBhelper db = new 日积月累啥的啊.DBhelper(); ListItem[] item=]; DataTable dt=db.GetDataTabl ...

  8. JSP环境配置

    为免以后忘记,记下了. Jdk在C盘,tomcat在D盘. 1.JAVA_HOME C:\Program Files\Java\jdk1.7.0_07 2.CATALINA_HOME D:\apach ...

  9. Match & Catch

    Codeforces Round #244 (Div. 2) D:http://codeforces.com/contest/427/problem/D 题意:给你两个串,让你找一个最小的串,并且这个 ...

  10. ArtisticStyle----很好用的C/C++样式格式化工具

    下载地址:http://srgb.googlecode.com/files/AStyle_2.02_windows.7z 把astyle.exe 复制到 C:\WINDOWS 目录里,省的指定路径VC ...