一、如何开发一个简单的html5小游戏

创建画布

// Create the canvas

var canvas = document.createElement("canvas");

var ctx = canvas.getContext("2d");

canvas.width = 512;

canvas.height = 480;

document.body.appendChild(canvas);

首先我们需要创建一张画布作为游戏的舞台。这里通过JS代码而不是直接在HTML里写一个元素目的是要说明代码创建也是很方便的。有了画布后就可以获得它的上下文来进行绘图了。然后我们还设置了画布大小,最后将其添加到页面上。

准备图片

// 背景图片

var bgReady = false;

var bgImage = new Image();

bgImage.onload = function () {

bgReady = true;

};

bgImage.src = "images/background.png";

游戏嘛少不了图片的,所以我们先加载一些图片先。简便起见,这里仅创建简单的图片对象,而不是专门写一个类或者Helper来做图片加载。bgReady这个变量用来标识图片是否已经加载完成从而可以放心地使用了,因为如果在图片加载未完成情况下进行绘制是会报错的。

整个游戏中需要用到的三张图片:背景,英雄及怪物我们都用上面的方法来处理。

游戏对象

// 游戏对象

var hero = {

speed: 256, // 每秒移动的像素

x: 0,

y: 0

};

var monster = {

x: 0,

y: 0

};

var monstersCaught = 0;

现在定义一些对象将在后面用到。我们的英雄有一个speed属性用来控制他每秒移动多少像素。怪物游戏过程中不会移动,所以只有坐标属性就够了。monstersCaught则用来存储怪物被捉住的次数。

处理用户的输入

// 处理按键

var keysDown = {};

addEventListener("keydown", function (e) {

keysDown[e.keyCode] = true;

}, false);

addEventListener("keyup", function (e) {

delete keysDown[e.keyCode];

}, false);

现在开始处理用户的输入(对初次接触游戏开发的前端同学来说,这部分开始可能就需要一些脑力了)。在前端开发中,一般是用户触发了点击事件然后才去执行动画或发起异步请求之类的,但这里我们希望游戏的逻辑能够更加紧凑同时又要及时响应输入。所以我们就把用户的输入先保存下来而不是立即响应。

为此,我们用keysDown这个对象来保存用户按下的键值(keyCode),如果按下的键值在这个对象里,那么我们就做相应处理。

开始一轮游戏

// 当用户抓住一只怪物后开始新一轮游戏

var reset = function () {

hero.x = canvas.width / 2;

hero.y = canvas.height / 2;

// 将新的怪物随机放置到界面上

monster.x = 32 + (Math.random() * (canvas.width - 64));

monster.y = 32 + (Math.random() * (canvas.height - 64));

};

reset方法用于开始新一轮和游戏,在这个方法里我们将英雄放回画布中心同时将怪物放到一个随机的地方。

更新对象

// 更新游戏对象的属性

var update = function (modifier) {

if (38 in keysDown) { // 用户按的是↑

hero.y -= hero.speed * modifier;

}

if (40 in keysDown) { // 用户按的是↓

hero.y += hero.speed * modifier;

}

if (37 in keysDown) { // 用户按的是←

hero.x -= hero.speed * modifier;

}

if (39 in keysDown) { // 用户按的是→

hero.x += hero.speed * modifier;

}

// 英雄与怪物碰到了么?

if (

hero.x <= (monster.x + 32)

&& monster.x <= (hero.x + 32)

&& hero.y <= (monster.y + 32)

&& monster.y <= (hero.y + 32)

) {

++monstersCaught;

reset();

}

};

这就是游戏中用于更新画面的update函数,会被规律地重复调用。首先它负责检查用户当前按住的是中方向键,然后将英雄往相应方向移动。

有点费脑力的或许是这个传入的modifier 变量。你可以在main 方法里看到它的来源,但这里还是有必要详细解释一下。它是基于1开始且随时间变化的一个因子。例如1秒过去了,它的值就是1,英雄的速度将会乘以1,也就是每秒移动256像素;如果半秒钟则它的值为0.5,英雄的速度就乘以0.5也就是说这半秒内英雄以正常速度一半的速度移动。理论上说因为这个update 方法被调用的非常快且频繁,所以modifier的值会很小,但有了这一因子后,不管我们的代码跑得快慢,都能够保证英雄的移动速度是恒定的。

现在英雄的移动已经是基于用户的输入了,接下来该检查移动过程中所触发的事件了,也就是英雄与怪物相遇。这就是本游戏的胜利点,monstersCaught +1然后重新开始新一轮。

渲染物体

// 画出所有物体

var render = function () {

if (bgReady) {

ctx.drawImage(bgImage, 0, 0);

}

if (heroReady) {

ctx.drawImage(heroImage, hero.x, hero.y);

}

if (monsterReady) {

ctx.drawImage(monsterImage, monster.x, monster.y);

}

// 计分

ctx.fillStyle = "rgb(250, 250, 250)";

ctx.font = "24px Helvetica";

ctx.textAlign = "left";

ctx.textBaseline = "top";

ctx.fillText("Monsterrs caught: " + monstersCaught, 32, 32);

};

之前的工作都是枯燥的,直到你把所有东西画出来之后。首先当然是把背景图画出来。然后如法炮制将英雄和怪物也画出来。这个过程中的顺序是有讲究的,因为后画的物体会覆盖之前的物体。

这之后我们改变了一下Canvas的绘图上下文的样式并调用fillText来绘制文字,也就是记分板那一部分。本游戏没有其他复杂的动画效果和打斗场面,绘制部分大功告成!

主循环函数

// 游戏主函数

var main = function () {

var now = Date.now();

var delta = now - then;

update(delta / 1000);

render();

then = now;

// 立即调用主函数

requestAnimationFrame(main);

};

上面的主函数控制了整个游戏的流程。先是拿到当前的时间用来计算时间差(距离上次主函数被调用时过了多少毫秒)。得到modifier后除以1000(也就是1秒中的毫秒数)再传入update函数。最后调用render 函数并且将本次的时间保存下来。

关于游戏中循环更新画面的讨论可参见「Onslaught! Arena Case Study」。

关于循环的进一步解释

// requestAnimationFrame 的浏览器兼容性处理

var w = window;

requestAnimationFrame = w.requestAnimationFrame || w.webkitRequestAnimationFrame || w.msRequestAnimationFrame || w.mozRequestAnimationFrame;

如果你不是完全理解上面的代码也没关系,我只是觉得拿出来解释一下总是极好的

为了循环地调用main函数,本游戏之前用的是setInterval。但现今已经有了更好的方法那就是requestAnimationFrame。使用新方法就不得不考虑浏览器兼容性。上面的垫片就是出于这样的考虑,它是Paul Irish 博客原版的一个简化版本。

启动游戏!

// 少年,开始游戏吧!

var then = Date.now();

reset();

main();

总算完成了,这是本游戏最后一段代码了。先是设置一个初始的时间变量then用于首先运行main函数使用。然后调用 reset 函数来开始新一轮游戏(如果你还记得的话,这个函数的作用是将英雄放到画面中间同时将怪物放到随机的地方以方便英雄去捉它)。

到此,相信你已经掌握了开发一个简单H5小游戏需要的基本功了。玩玩这个游戏或者下载代码自己研究研究吧 :)

Feel free to repost but keep the link to this page please!

二、什么是HTML代码 ? 怎么制作HTML代码?

HTML代码 是超文本标记语言文本,可以用文本编辑器制作HTML代码 ,这里以记事本为例。

1、右击电脑桌面任意空白区域,在展开的菜单中点击“新建”按钮,然后点击“文本文件”按钮:

2、打开新建的文本文件,在里面输入一些HTML基础的代码,然后同时按住键盘上的“Ctrl”键+“S”键将文件保存:

3、用鼠标将文件选中,按下键盘上的“F2”键,然后将文件格式从“txt”改成“html”,这时一个简单的HTML代码就制作好了:

三、网页设计常用HTML代码

网页设计常用HTML代码大全

HTML是用来描述网页的一种语言。下面我为大家分享HTML代码,希望对大家学习html代码有帮助!

忽视右键

1.如何几秒后转到别的页面?

2.点击关闭窗口

点击关闭窗口

3.请问如何去掉主页右面的滚动条?

4.请问如何做到让一个网页自动关闭.

这个窗口会在10秒过后自动关闭,而且不会出现提示.

如何在不刷新页面的情况下刷新css?

请问如何让网页自动刷新?

在head部记入其中20为20秒后自动刷新,你可以更改为任意值。

5.如何让页面自动刷新?

方法一,用refresh

HTML 代码片段如下:

5表示刷新时间

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

方法二,使用setTimeout控制

6.如何让超链接没有下划线

在源代码中的…之间输入如下代码:

7.请问如何去掉IE的上下滚动条?

8.怎样才能把RealPlayer文件在网页做一个试听连接?

9.如何用html实现浏览器上后退按钮的功能?

点击后退

或者

10.请问怎么在网页中改变鼠标的箭头形状?

HTML 代码片段如下:

auto

crosshair

default

hand

move

e-resize

ne-resize

nw-resize

n-resize

se-resize

sw-resize

s-resize

w-resize

text

wait

help

11.怎样不使用页面的缓存?即每一次打开页面时不是调用缓存中的东西

12.页面打开时自动弹出一个窗口的代码怎么写?

HTML 代码片段如下:

Untitled Document

13.如何让我的页面出现一个会讲话的小人?Merlin

HTML 代码片段如下:

默林

看此效果必须装有office2000!!!

14.在页面中如何加入不是满铺的背景图片,拉动页面时背景图不动

HTML 代码片段如下:

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

background-repeat:no-repeat; 是让背景图不占满整个页面

body bgproperties="fixed" 是拉动scroll时背景图不动

15.文本输入框什么属性能实现不可输入?

HTML 代码片段如下:

或者

16.如何禁止自己的页面在别人的框架里打开?

把以下代码加至你的区

17.如何实现首页全屏幕显示?

HTML 代码片段如下:

18.如何监听一个窗口被关闭了?

HTML 代码片段如下:

19.如何禁止Ctrl+N?

HTML 代码片段如下:

如何把页面加入用户的收藏夹?

HTML 代码片段如下:

javascript:window.external.AddFavorite(‘‘‘‘‘‘‘‘,‘‘‘‘无忧脚本‘‘‘‘)">收藏无忧脚本

如何在我的'页面中加入背景音乐?

IE:

NS:

*.mid你的背景音乐的midi格式文件

关于页面转换效果

说明:Transition=23是随机效果,另可以选0-22任一数字固定某个效果

如何设定打开页面的大小

HTML 代码片段如下:

怎样双击滚屏,单击停止?

HTML 代码片段如下:

新网页1

a

a

a

aa

aa

aa

aa

aa

aa

aa

aa

aa

aa

aa

aa

aa

aa

aa

aa

aa

aa

aa

a

如何让body中的文字不被选中?

HTML 代码片段如下:

aaa

如何让弹出的窗口不能关闭?

在新开的窗口中加入如下代码

如何让浏览器在保存页面时保存失败?

HTML 代码片段如下:

<IFRAME SRC="*.html">

IFRAME>

表单中如何用图片按钮实现 reset?

进入网页时弹出的信息对话框

关闭窗口后弹出对话框

告别提示

右键菜单的制作

下拉菜单

下拉菜单

;

四、常用的HTML代码

常用HTML代码解释

一、文字

1.标题文字 .......... #=1~6;h1为最大字,h6为最小字

2.字体变化 ..........

【1】字体大小 .......... #=1~7;数字愈大字也愈大

【2】指定字型 ..........

【3】文字颜色 ..........

rr:表红色(red)色码

gg:表绿色(green)色码

bb:表蓝色(blue)色码

rrggbb也可用6位颜色代码数字

3.显示小字体 ..........

4.显示大字体 ..........

5.粗体字 ..........

6.斜体字 ..........

7.打字机字体 ..........

8.底线 ..........

9.删除线 ..........

10.下标字 ..........

11.上标字 ..........

12.文字闪烁效果 ..........

13.换行(也称回车)

14.分段

15.文字的对齐方向

#号可为 left:表向左对齐(预设值) center:表向中对齐 right:表向右对齐 P.S.

之后的文字都会以所设的对齐方式显示,直到出现另一个

改变其对齐方向,遇到


标签时会自动设回预设的向左对齐。

16.分隔线


【1】分隔线的粗细


【2】分隔线的宽度


【3】分隔线对齐方向


#号可为 left:表向左对齐(预设值) center:表向中对齐 right:表向右对齐

【4】分隔线的颜色


【5】实心分隔线


17.居中对齐

..........

18.依原始样式显示

..........

19.指令的属性

【1】背景颜色 -- bgcolor

【2】背景图案 -- background

【3】设定背景图案不会卷动 -- bgproperties

【4】文件内容文字的颜色 -- text

【5】超连结文字颜色 -- link

【6】正被选取的超连结文字颜色 -- vlink

【7】已连结过的超连结文字颜色 -- alink

20.文字移动指令..........

移动速度指令是:scrollAmount=# #最小为1,速度为最慢;数字越大移动的越快。

移动方向指令是:direction=# up向上、down向下、left向左、right向右。

指令举例:..........

二、图片

1.插入图片

2.设定图框 -- border

3.设定图形大小 -- width、height

4.设定图形上下左右留空 -- vspace、hspace

5.图形附注 说明文字

6.预载图片

P.S.两个图的图形大小最好一致;

7.影像地图(Image Map)

【1】定义形状 -- shape

shape=rect:矩形 shape=circle:圆形 shape=poly:多边形

【2】定义区域 -- coords

a.矩形:必须使用四个数字,前两个数字为左上角座标,后两个数字为右下角座标

例:

b.圆形:必须使用三个数字,前两个数字为圆心的座标,最后一个数字为半径长度

例:

c.任意图形(多边形):将图形之每一转折点座标依序填入

例:

三、表格相关

1.表格标题

..........

表格标题位置 -- align

#号可为 top:表标题置于表格上方(预设值)

bottom:表标题置于表格下方

2.定义列

3.定义栏位 《1》:靠左对齐

《2》:靠中对齐ⅱ粗体

【1】水平位置 -- align

#号可为 left:向左对齐 center:向中对齐 right:向右对齐

【2】垂直位置 -- align #号可为

top:向上对齐 middle:向中对齐 bottom:向下对齐

【3】栏位宽度 -- width

【4】栏位垂直合并 -- rowspan

【5】栏位横向合并 -- colspan

四、表格的主要属性

1.

标记的主要属性

align定义表格的对齐方式,有三个属性值center,left,right

background定义表格的背景图案,属性值为图片的地址

bgcolor定义表格的背景颜色,属性值是各种颜色代码

border定义表格的边框宽度,属性值是数字

bordercolor定义表格边框的颜色,属性值是各种颜色代码

cellpadding定义单元格内容与单元格边框之间的距离,属性值是数字

cellspacing定义表格中单元格之间的距离

height定义表格的高度,属性值是数字

width定义表格的宽度,属性值是数字

2.

标记,表格是由多行与多列组成的,标记用来定义表格的一行,他的属性极其属性值定义的是表格中的该行,其主要属性与属性值如下:

align定义对齐方式,属性值与上同

background定义背景图案 bgcolor定义背景色

3.

标记。用标记概况起来的内容表示表格的单元。其主要属性与属性值和标记的一样,补充两个合并列和行的代码:

colspan定义合并表格的列数,属性值是数字

rowspan定义合并表格的行数,属性值是数字

五、FRAME

1、分割视窗指令 ..........

【1】垂直(上下)分割 -- rows

#号可为点数:

如欲分割为100,200,300三个视窗,则;

亦可以*号代表,如

百分比:如,各项总和最好为100%;

【2】水平(左右)分割 -- cols

2、指定视窗内容 --

【1】指定视窗的文件名称 -- src

【2】定义视窗的名称 -- name

【3】设定文件与上下边框的距离 -- marginheight

【4】设定文件与左右边框的距离 -- marginwidth

【5】设定分割视窗卷轴 -- scrolling

#号可为 yes:固定出现卷轴

no:不出现卷轴

auto:自动判断文件大小需不需要卷轴(预设值)

【6】锁住分割视窗的大小 -- noresize

六、歌曲代码:

在这组代码中,不必管它是mms.http.rtsp,只要看尾缀是asf、wma、wmv、wmv、rm都可适用下面的代码:

1. 手动播放:

2. 打开页面自动播放:

------------------------------------------------------------------

套用代码:




歌曲或音乐名称



介绍文字





简易套用代码详解:

是定义帖子居中;

这其中的border="1"是定义表格边线的宽度,定义为0则无边线;width="90%" height="403"分别定义背景图表格的宽度和高度.如果背景图是一张大图,可以这样定义:width=图片宽度 height=图片高度




歌曲或音乐名称

是定义文字居中的,
是回行代码,加几个就会空几行。是定义文字属性的。face="华文彩云"是定义字体,你可以把字体换成隶书、宋体等。size="6"是定义字号的,数字越大字越大,如果不定义,默认是2号字。color="#FFFFFF"是定义字体颜色的。全部字体颜色的代码在妙手饰图区有人发过,你可以找来改。



介绍文字


第一个括号里的代码仍然是定义图片和文字居中的。是插入图片代码。介绍文字是定义这段文字的。如果想改变字拧⒆痔濉⒆值难丈��烧瞻嵘厦嫖医驳亩ㄒ宸椒ā?/font>

这一段是插入播放器代码,因为我插的是特殊的播放器,style="FILTER: xray()" 是特殊代码。“src=音乐地址”是插入音乐文件的地址。width=250 height=30分别定义播放器的宽度和高度(如果把宽和高都设成零则为隐藏,并且只能自动播放)。autostart="true" loop="-1"是定义音乐播放方式的,autostart="true"是设定手动或自动播放,“true”或“1”是自动播放,“false”或“0”是手动播放;loop="-1"是播放次数,“true”或“1”表示重复播放,“false”“-1”或“0”是只播放一次。




回行代码和与前面对应的固定代码。

这一段是插入播放器代码,因为我插的是特殊的播放器,style="FILTER: xray()" 是特殊代码。“src=音乐地址”是插入音乐文件的地址。width=250 height=30分别定义播放器的宽度和高度(如果把宽和高都设成零则为隐藏,并且只能自动播放)。autostart="true" loop="-1"是定义音乐播放方式的,autostart="true"是设定手动或自动播放,“true”或“1”是自动播放,“false”或“0”是手动播放;loop="-1"是播放次数,“true”或“1”表示重复播放,“false”“-1”或“0”是只播放一次。