一个完整的html代码怎么编写?

一个完整的html代码怎么编写?,第1张

简单的htm的编写过程如下:

先新建一个文本文件,可以自己命名,如下图,我命名为测试。

编译文本,以最简单的代码格式为例<html>     <head>         <title>         </title>     </head>     <body>     </body></html>

在<body></body>写入你要写的内容,下面以hello world为例。

修改文件后缀名,将txt改为html。

测试是否成功,双击  测试.html,如果出现了下面的内容,恭喜你,你已经学会了最简单的html编写。

创建画布

// 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里写一个<canvas>元素目的是要说明代码创建也是很方便的。有了画布后就可以获得它的上下文来进行绘图了。然后我们还设置了画布大小,最后将其添加到页面上。

准备图片

// 背景图片

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 函数来开始新一轮游戏(如果你还记得的话,这个函数的作用是将英雄放到画面中间同时将怪物放到随机的地方以方便英雄去捉它)。

html5游戏开发,需要学习的技术:

1、HTML5教程

主要学习HTML标签、属性和事件。

2、CSS教程

主要学习使用CSS来控制网页的样式和布局。

3、JavaScript教程

做HTML5开发,主要使用JS语言。所以要学习JS语言。

4、HTML5其它的核心技术

做HTML5开发,可能会用到下面的技术。

(1)WebWorker

可以在浏览器中运行多个JS脚本。可以用于需要后台执行某种耗时工作的场合。

(2)WebSocket

浏览器可以与服务器间双向通信。Socket方式能够大大提高浏览器与服务器间的通信效率。可以用于浏览器与服务器间通信频繁的场合,比如实时聊天。

扩展资料:

HTML5的优点:

新一代网络标准能够让程序通过Web浏览器,消费者从而能够从包括个人电脑、笔记本电脑、智能手机或平板电脑在内的任意终端访问相同的程序和基于云端的信息。

HTML5允许程序通过Web浏览器运行,并且将视频等目前需要插件和其它平台才能使用的多媒体内容也纳入其中,这将使浏览器成为一种通用的平台,用户通过浏览器就能完成任务。此外,消费者还可以访问以远程方式存储在“云”中的各种内容,不受位置和设备的限制。

缺点:

1、开放性带来的困扰

在从前网络平台上存在大量的专利产品,想要实现HTML5技术的大量应用首先就需要将这些专利性的产品变为开放式的产品,由于各种原因,当前面对这一问题还存在许多争议。

以视频格式为例,两大阵营对于视频格式的设置存在争议,一大阵营以苹果为代表,另一大阵营则以Opera、火狐、谷歌为代表。

WPEG阵营是苹果所属阵营,由于其自身全部使用的是这一种格式,所以坚持认为应当将此格式作为标准,而WebM阵营则认为由于WPEG格式的专利依然没有解除,对于HTML5技术要求的开放性没有达标,所以不同意将其作为标准格式。

2、发展的速度有待提升

在HTML5中提出了一些从前HTML技术中不具有的新技术,但是有许多主流浏览器在长时间的发展过程中已经完成了此种技术的开发,在自身浏览器中实现了此种功能,就这一情况来说HTML5的发展速度方面存在一定的问题。

同时由于HTML5的不成熟,当前关于HTML5的相关技术标准还没有完全确定,所以在短时间想要将其投入大规模应用还比较困难。

参考资料:百度百科-html5


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7162837.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-02
下一篇 2023-04-02

发表评论

登录后才能评论

评论列表(0条)

保存