一、如何开发一个简单的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?
button{ color:#000000;}
请问如何让网页自动刷新?
在head部记入其中20为20秒后自动刷新,你可以更改为任意值。
5.如何让页面自动刷新?
方法一,用refresh
HTML 代码片段如下:
5表示刷新时间
[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]
方法二,使用setTimeout控制
function rl(){
document.location.reload()
}
setTimeout(rl,2000)
6.如何让超链接没有下划线
在源代码中的
…之间输入如下代码:
7.请问如何去掉IE的上下滚动条?
8.怎样才能把RealPlayer文件在网页做一个试听连接?
9.如何用html实现浏览器上后退按钮的功能?
或者
10.请问怎么在网页中改变鼠标的箭头形状?
HTML 代码片段如下:
11.怎样不使用页面的缓存?即每一次打开页面时不是调用缓存中的东西
12.页面打开时自动弹出一个窗口的代码怎么写?
HTML 代码片段如下:
13.如何让我的页面出现一个会讲话的小人?Merlin
HTML 代码片段如下:
var MerlinID;
var MerlinACS;
sims.Connected = true;
MerlinLoaded = LoadLocalAgent(MerlinID, MerlinACS);
Merlin = sims.Characters.Character(MerlinID);
Merlin.Show();
Merlin.Play("Surprised");
Merlin.Speak("大家好");
Merlin.Play("GestureLeft");
Merlin.Think("我是默林!");
Merlin.Play("Pleased");
Merlin.Think("可爱吗?");
Merlin.Play("GestureDown");
Merlin.Speak("哈哈!");
Merlin.Hide();
function LoadLocalAgent(CharID, CharACS){
LoadReq = sims.Characters.Load(CharID, CharACS);
return(true);
}
看此效果必须装有office2000!!!
14.在页面中如何加入不是满铺的背景图片,拉动页面时背景图不动
HTML 代码片段如下:
body {background-image:url(logo.gif);
background-repeat:no-repeat; background-position:center }
[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]
background-repeat:no-repeat; 是让背景图不占满整个页面
body bgproperties="fixed" 是拉动scroll时背景图不动
15.文本输入框什么属性能实现不可输入?
HTML 代码片段如下:
或者
16.如何禁止自己的页面在别人的框架里打开?
把以下代码加至你的
区
if (window.top!=self){
window.top.location=self.location
}
17.如何实现首页全屏幕显示?
HTML 代码片段如下:
18.如何监听一个窗口被关闭了?
HTML 代码片段如下:
19.如何禁止Ctrl+N?
HTML 代码片段如下:
如何把页面加入用户的收藏夹?
HTML 代码片段如下:
javascript:window.external.AddFavorite(‘‘‘‘‘‘‘‘,‘‘‘‘无忧脚本‘‘‘‘)">收藏无忧脚本
如何在我的'页面中加入背景音乐?
IE:
NS:
*.mid你的背景音乐的midi格式文件
关于页面转换效果
或
说明:Transition=23是随机效果,另可以选0-22任一数字固定某个效果
如何设定打开页面的大小
HTML 代码片段如下:
怎样双击滚屏,单击停止?
HTML 代码片段如下:
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?
function aaa(){
document.forms[0].reset()
}
进入网页时弹出的信息对话框
关闭窗口后弹出对话框
告别提示
右键菜单的制作
下拉菜单
;
四、常用的HTML代码
常用HTML代码解释
一、文字
1.标题文字
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
bottom:表标题置于表格下方
2.定义列
3.定义栏位 《1》
《2》
【1】水平位置 -- align
#号可为 left:向左对齐 center:向中对齐 right:向右对齐
【2】垂直位置 -- align
top:向上对齐 middle:向中对齐 bottom:向下对齐
【3】栏位宽度 -- width
【4】栏位垂直合并 -- rowspan
【5】栏位横向合并 -- colspan
四、表格的主要属性
1.
标记。用 | 标记概况起来的内容表示表格的单元。其主要属性与属性值和五、H5页面小游戏怎么做的H5的小游戏其实就是用基于HTML5技术制作的小游戏,常见的HTML5游戏制作,如果不考虑游戏策划,如果你关心的更多的是制作的话, 那么按照制作方式可以分为两种: 1、原生开发 就是自己写HTML5代码(HTML/CSS/Javascript),或者使用第三方引擎,例如国内常见的白鹭、Cocos2d-Js,以及国外的,这个极力推荐,虽然国内用的人不多。 2、第三工具 另外就是通过一些第三方工具来实现游戏的生成与定制。 这里也可以分为两类 A 套模版 有简单的直接套模版,替换素材,游戏音乐音效即可直接完成的,例如我们做的24好玩平台即是其中之一,类似的还有极点互动、微播盈趣、凡科互动等等。 B 工具编辑器 也有一些高级的工具类似于H5互动编辑器MAKA,我知道的有国外的Construct,如果你想学,不想从0开始学代码,这个是一个略微高级的学法。 希望能够帮到你。 作者:易良慧 链接: 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 |