《HTML5 2D游戏编程核心技术》——第1章,第1.2节HTML5游戏开发最佳实践

简介: 本节书摘来自华章出版社《HTML5 2D游戏编程核心技术》一书中的第1章,第1.2节HTML5游戏开发最佳实践,作者[美] 戴维·吉尔里,更多章节内容可以访问云栖社区“华章计算机”公众号查看。 1.2 HTML5游戏开发最佳实践 我们将在本书中持续地讨论一些关于游戏开发的最佳实践,首先介绍7个与HTML5有关的实践。

本节书摘来自华章出版社《HTML5 2D游戏编程核心技术》一书中的第1章,第1.2节HTML5游戏开发最佳实践,作者[美] 戴维·吉尔里,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.2 HTML5游戏开发最佳实践

我们将在本书中持续地讨论一些关于游戏开发的最佳实践,首先介绍7个与HTML5有关的实践。
1)窗口失去焦点时暂停游戏。
2)窗口重新获得焦点时实现倒计时。
3)使用CSS实现UI特效。
4)对于运行缓慢的游戏做出检测和处理。
5)添加社交功能。
6)把所有的游戏图像放在单独的Sprite表单中。
7)在服务器中存储高分榜和实时游戏数据。
在接下来的章节中,我们将详细地讨论上面提到的最佳实践。本节先通过快速浏览这些实践来介绍Snail Bait游戏的特点。

1.2.1 窗口失去焦点时暂停游戏
在浏览器中运行HTML5游戏时,如果将焦点改变到另一个标签页或浏览器窗口上,那么大部分浏览器都会降低游戏动画运行的帧频,以便节约CPU和电池的开销。因为在窗口或者标签页上浪费不可见的资源是没有必要的。
帧速率锁定破坏了大多数的碰撞检测算法,因为这些算法会在游戏绘制每一个动画帧时检测碰撞。如果在两个动画帧之间花费太长时间,sprite对象会越过彼此而没有碰撞检测。为了避免这种帧速率锁定导致的碰撞检测崩溃,必须在窗口失去焦点时暂停游戏。
如图1.5所示,当Snail Bait游戏暂停时,它会显示一个提示信息,让玩家知道游戏暂停。


b7d3d976e7cf17dd3b1f275a0d7d7c4be9e0b4e8

图1.5 Snail Bait暂停
暂停不仅仅是停止游戏
当一个暂停的游戏恢复运行时,所有状态必须和游戏暂停时的状态相同。例如在图1.5中,当比赛恢复时,跑步小人必须在游戏暂停时所在的位置继续跳跃。
除了暂停和恢复游戏之外,还必须要冻结和解冻游戏,确保在游戏恢复时有一个平滑的转换。我们将在第4章详细地讨论暂停游戏。
提示信息(toast)
toast原意是指举起酒杯为人的健康干杯,这里是指短时间内向玩家显示游戏信息。如图1.5所示,toast可以是简单的文本,也可以显示传统对话框,如图1.8所示。
1.2.2 窗口重获焦点时实现倒计时功能
当窗口重新获取焦点时,应该给玩家几秒钟准备重新开始游戏。Snail Bait游戏在窗口重新获取焦点时,提供了3秒钟的倒计时准备时间,如图1.6所示。


4c10a24ba870f9149f525bff7ef2a3e48ffde1af

图1.6 Snail Bait在窗口重新获取焦点时的倒计时
1.2.3 使用CSS实现UI特效
图1.7显示了游戏加载后短时间内的截图。
重点注意图1.7中的两个物体。第一,显示了包含简单文字的提示信息。这个提示信息在游戏加载时淡入,5秒后淡出。


8f05e5a72bdad9551277e9a22d8d557a9311344d

图1.7 Snail Bait游戏中的提示信息
第二,如图1.7所示,在游戏开始时,canvas下面的复选框(控制声音和音乐)和说明文字(讲述哪些按键有哪些功能)是不透明的,而游戏顶部的生命提示符和分数板是半透明的。当游戏提示信息渐渐消失时,透明度发生反转;生命提示符和分数板变得不透明,而复选框和说明文字变得几乎完全透明,如图1.6所示。
Snail Bait游戏使用CSS3渐变属性来实现元素的淡化显示及提示板的淡入淡出效果。
聚焦当前重要的事件
当Snail Bait游戏开始时,canvas下面的介绍是不透明的,而canvas上面的生命提示符和分数板是半透明的。过一会之后,它们的不透明度会发生变化;canvas上面的元素会变得完全不透明,而canvas下面的元素变得半透明。
Snail Bait游戏之所以会具有如此复杂的操作,与当前关注的重点是什么有密切关系。初始化时,玩家会关注游戏下面的说明文字;而游戏一旦开始后,玩家将更加关注他们的得分情况以及剩余生命的数量。

1.2.4 对游戏运行缓慢的状态做出检测和处理
与控制台游戏运行在受控环境中不同,HTML5游戏运行在一个高度变化且不可预测的混乱环境中。玩家的某些操作可以直接影响到系统的性能,例如,在另一个浏览器标签页或窗口中播放YouTube视频。另外,一些其他性能杀手,例如玩家并不了解的在系统后台运行的进程,也可能轻松地使HTML5游戏变得运行缓慢,甚至变得不可玩。还有一种可能是玩家使用了不能保障游戏正常运行的浏览器。
作为HTML5游戏开发人员,必须要监测帧速率,当它降低到某个影响运行的阈值时做出处理。当Snail Bait游戏检测到最后10帧动画速率低于40帧每秒(fps)时,它会显示游戏运行缓慢的通知信息如图1.8所示。


889791a5a1966fb740527d0385017b149417a553

图1.8
1.2.5 添加社交功能
许多现代游戏融合了社交功能,例如,将游戏分数发布到Twitter或者Facebook上。当Snail Bait游戏玩家点击游戏底部(如图1.4所示)的Tweet my score链接时,Snail Bait游戏会在另一个浏览器标签页上创建一个发布分数的推特交互窗口,如图1.9所示。

ed1a06b524825a6019cf87b326d435ddc3d47995

1.2.6 将所有游戏图像放在单独的sprite表单中
开发人员可以通过做很多事情使HTML5游戏(或者任何HTML5应用)加载得更快,但是最有效的办法是减少向服务器发送HTTP请求的次数。一种实现该方法的途径是将所有游戏图像放到一个单独的图像里,这个单独的图像被称为sprite表单(sprite sheet)。图1.10显示了Snail Bait游戏的sprite表单。
图1.10 Snail Bait游戏的sprite表单(灰色背景是透明的)


f9886edc0b68571cec686378e9d6711d3556f133

Snail Bait游戏的sprite表单
当Snail Bait游戏绘制sprite对象时,它会从sprite表单中复制对象到canvas中。
移动设备上的sprite表单
一些移动设备的内存空间限制了图像文件的大小,如果sprite表单太大,则需要将它分成多个文件。这样游戏的加载将会变得缓慢,但是总比没有加载上要好很多。

1.2.7 在服务器中存储高分榜和实时游戏数据
大多数游戏会因为各种原因同服务器进行交互。Snail Bait游戏在服务器中存储高分榜数据,并在游戏进行时发送游戏数据。Snail Bait游戏未使用任何第三方图像架构;但它使用了两个JavaScript架构——Node.js和socket.io,用来实现玩家电脑和服务器的信息交互。第19章介绍了更详细的信息。

相关文章
|
3月前
|
数据采集 移动开发 搜索推荐
HTML基础-HTML5新增语义标签:解锁网页结构新维度
【6月更文挑战第5天】本文介绍了HTML5的语义标签,旨在提升网页结构化和可访问性。核心语义标签包括`<header>`、`<nav>`、`<main>`、`<article>`、`<section>`、`<aside>`、`<footer>`、`<figure>`和`<figcaption>`。常见问题包括滥用标签作布局工具、忽略`<main>`、不恰当嵌套和忽视辅助功能。
48 3
|
3月前
|
移动开发 前端开发 程序员
程序员必知:基于HTML5堆木头游戏
程序员必知:基于HTML5堆木头游戏
22 0
|
3月前
|
移动开发 HTML5
html5为什么只需要写<!doctype html>? 一共有多少种Doctype文档类型?
html5为什么只需要写<!doctype html>? 一共有多少种Doctype文档类型?
41 0
|
3月前
切方块游戏 HTML5+jQuery【附源码】
切方块游戏 HTML5+jQuery【附源码】
25 0
|
3月前
|
存储 移动开发 前端开发
Web网页制作-知识点(1)——HTML5介绍、HTML5的DOCTYPE声明、HTML基本骨架、标题标签、段落 换行、水平线图片图片路径、超链接
Web网页制作-知识点(1)——HTML5介绍、HTML5的DOCTYPE声明、HTML基本骨架、标题标签、段落 换行、水平线图片图片路径、超链接
51 0
|
4月前
|
移动开发 前端开发 JavaScript
【专栏:HTML与CSS实战项目篇】使用HTML5与CSS3制作一个动态表单验证页面
【4月更文挑战第30天】本文介绍了使用HTML5和CSS3创建动态表单验证页面的方法。首先,简述HTML5用于构建网页内容,CSS3用于描述样式。接着,分四步展示实现过程:1) 设计包含输入框和提示信息的表单结构;2) 使用CSS3创建样式,增强视觉效果;3) 使用JavaScript监听输入事件,动态验证表单并显示错误信息;4) 测试和调试确保跨平台兼容性。通过学习,开发者能掌握创建带验证功能的表单,提升用户体验。
65 7
|
4月前
|
移动开发 搜索推荐 HTML5
尚硅谷html5+css3(1)html相关知识
尚硅谷html5+css3(1)html相关知识
|
4月前
|
移动开发 Android开发 iOS开发
ios标准页面调用HTML5页面和HTML5调用ios的函数
ios标准页面调用HTML5页面和HTML5调用ios的函数
45 0