HTML5 2D视频游戏:实现游戏对象、暂停、冻结、解冻和键盘输入

游戏开发的许多方面都和玩游戏没有关系。显示说明、暂停游戏、级别之间的过渡和滚动游戏分数,这些都是游戏">开发人员必须在游戏本身以外实现的一些特性。

当游戏的灵感来临时,这些灵感中通常不包括显示高分数或级别之间的过渡的巧妙方式,开发人员会很自然地深入研究如何实现游戏机制,但对于游戏的基础架构却没有太多的想法。但在大多数项目中,如果想在开发后添加功能,所需的工作量比从一开始就添加功能要大得多。

在本系列的 上一期文章 中,我讨论了图形和动画,这些是 Snail Bait 游戏的基础内容。在本文中,我将临时转向去实现该游戏的一些基础架构。首先,我将 Snail Bait 的代码封装在一个 Game 对象中。最初实现该游戏时,我就是从这一步开始的,但在上一期文章中,我不想在对象中实现它们而混淆了对图形和动画的讨论,所以我将对 Game 对象的介绍推迟到了现在。

我还将告诉您如何暂停和冻结 Snail Bait,以及随后如何利用动画倒计时解冻并重启游戏。在文章的结尾,我会回到游戏机制的主题,向您展示如何通过处理键盘事件来控制跑步小人的垂直位置。

在本文中,您将学习以下内容:

将游戏函数封装在一个对象中。 暂停和恢复游戏。 当窗口
失去焦点时自动暂停游戏。 当窗口重新获得焦点时,利用动画的倒计时继续游戏。 暂时显示给用户的消息(被称为 toast)。 处理键盘输入。

在本文中,您将学习如何定义和实例化 JavaScript 对象,如何使用 CSS3 过渡,以及如何结合使用 setTimeout() 和这些过渡来实现分步动画。

游戏对象

在本系列文章中,到现在为止,我已经实现了所有 Snail Bait 函数,并将它们的几个变量定义为全局变量。当然,我们以后不会再这样做。如果您尚未了解全局变量的可恶之处,请参阅 参考资料,获得来自 Douglas Crockford 和 Nicholas Zakas 等 JavaScript 名人的支持论据。

从现在开始,我不再使用全局变量,而是将所有 Snail Bait 函数和变量封装在一个对象中。该对象由两部分组成,如清单 1 和清单 2 所示。

清单 1 是本游戏的构造函数,它定义了对象的属性:

清单 1. 本游戏的构造函数(部分清单)

var SnailBait = function (canvasId) { this.canvas = document.getElementById(canvasId); this.context = this.canvas.getContext('2d'); // HTML elements this.toast = document.getElementById('toast'), this.fpsElement = document.getElementById('fps'); // Constants this.LEFT = 1; this.RIGHT = 2; ... // Many more attributes are defined in the rest of this function};

清单 2 是本游戏的原型,它定义了对象的方法:

清单 2. 是本游戏的原型(部分清单)

SnailBait.prototype = { // The draw() and drawRunner() methods were // discussed in the second article in this series. draw function (now) { this.setPlatformVelocity(); this.setOffsets(); this.drawBackground(); this.drawRunner(); this.drawPlatforms(); }, drawRunner: function () { this.context.drawImage(this.runnerImage, this.STARTING_RUNNER_LEFT, this.calculatePlatformTop(this.runnerTrack) - this.RUNNER_HEIGHT); }, ... // Many more methods are defined in the rest of this object};

为了在整个系列中添加一些新特性,我需要添加和删除一些方法,以及修改一些方法来实现。表 1 列出了 Snail Bait 的方法,因为它们会在本文结尾处出现:

表 1. Snail Bait 在此开发阶段的方法(按调用顺序列出)

方法 描述 initializeImages() 初始化游戏的图像。背景图像的 onload 事件处理器调用 start()。 start() 通过调用 requestAnimationFrame() 启动游戏,在可以绘制第一个动画帧的时候,它调用了 animate() 方法。 splashToast() [1] 向玩家显示一个临时消息。 animate() [2] 如果游戏没有暂停,此方法将会绘制下一个动画帧,并调用 requestNextAnimationFrame() 来安排 animate() 的另一次调用。如果游戏暂停,
那么 animate() 会等待 200 毫秒,
然后调用 requestNextAnimationFrame()。 calculateFps() 根据自最后一个动画帧起所
经过的时间,计算帧速率。 draw() 绘制一个动画帧。 setTranslationOffsets() 为背景和平台设置过渡偏移。 setBackgroundTranslationOffset() 根据当前时间设置背景过渡偏移。 setPlatformTranslationOffset() 根据当前时间设置平台过渡偏移。 setPlatformVelocity() 将平台速度设置为背景速度的倍数,以产生轻微的视差效果。 drawBackground() 平移 Canvas 坐标系统,绘制背景两次,并将坐标系平移回它的原始位置。 drawRunner() [3] 使用 drawImage() 绘制跑步小人。 drawPlatforms() [3] 使用 2D 上下文的 strokeRect() 和 fillRect() 绘制矩形平台。 calculatePlatformTop() 针对给定轨道计算平台顶部的 Y 坐标(平台在三个水平轨道之一上移动)。 turnLeft() 将背景和平台向右滚动。 turnRight() 将背景和平台向左滚动。 togglePaused() [1] 切换游戏的暂停状态。

[1] 在本文中介绍
[2] 由浏览器调用
[3] 在本系列的下一期文章中将被替换

在本系列前两期文章中,我介绍过在 表 1 中列出的大部分方法,它们在当时只是函数。在本文中,我会讨论两个新的方法:togglePaused() 和 splashToast(),还会修改其他方法,比如 animate()。

清单 1 和 清单 2 中的 JavaScript 定义了一个函数和一个原型,但没有实例化一个 SnailBait 对象。我会在下一节中完成此操作。

时间: 2024-10-23 10:24:11

HTML5 2D视频游戏:实现游戏对象、暂停、冻结、解冻和键盘输入的相关文章

如何逐步开始实现您的第一个HTML5 2D视频游戏

软件开发的优势在于:在合理的范围内让任何您能想象到的事物在屏幕上变成现实.不像其他领域受一些物理条件的束缚,软件开发人长期以来一直使用图形化 API 和 UI 工具包来实现富有创造性和引人注目的应用程序.最富有创造性的软件开发大概是游戏编程:比起让游戏景愿变成现实,优秀的创意就可使您通过少许努力便可获得更多的收益. 平台http://www.aliyun.com/zixun/aggregation/26040.html">视频游戏(Platformvideo games) Donkey K

《HTML5 2D游戏编程核心技术》——第1章,第1.1节Snail Bait游戏

本节书摘来自华章出版社<HTML5 2D游戏编程核心技术>一书中的第1章,第1.1节,作者[美] 戴维·吉尔里,更多章节内容可以访问"华章计算机"公众号查看. 第1章 概 述 令人激动的是,开发人员可以使用软件开发技术使屏幕上出现任何想象的场景.与其他领域受一些物理条件的束缚不同,开发人员长期以来一直使用图形化API和UI工具包来实现富有创造性且引人注目的应用程序.可以说,最有创意的软件开发就是游戏编程.比起让游戏愿景变成现实,优秀的创意还可使我们通过少许努力便获得更多的回

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

本节书摘来自华章出版社<HTML5 2D游戏编程核心技术>一书中的第1章,第1.2节HTML5游戏开发最佳实践,作者[美] 戴维·吉尔里,更多章节内容可以访问"华章计算机"公众号查看. 1.2 HTML5游戏开发最佳实践 我们将在本书中持续地讨论一些关于游戏开发的最佳实践,首先介绍7个与HTML5有关的实践. 1)窗口失去焦点时暂停游戏. 2)窗口重新获得焦点时实现倒计时. 3)使用CSS实现UI特效. 4)对于运行缓慢的游戏做出检测和处理. 5)添加社交功能. 6)把所有

《HTML5 2D游戏编程核心技术》——导读

目 录第1章 概述 1.1 Snail Bait游戏1.2 HTML5游戏开发最佳实践 1.2.1 窗口失去焦点时暂停游戏1.2.2 窗口重获焦点时实现倒计时功能1.2.3 使用CSS实现UI特效1.2.4 对游戏运行缓慢的状态做出检测和处理1.2.5 添加社交功能 1.2.6 将所有游戏图像放在单独的sprite表单中1.2.7 在服务器中存储高分榜和实时游戏数据1.3 特别功能 1.4 Snail Bait游戏中的HTML和CSS1.5 开始Snail Bait游戏编程 1.6 本书中使用的

HTML5 2D游戏开发实现Snail Bait人物角色

和其他艺术形式(比如电影.戏剧和小说)一样,游戏也有一系列的人物,每个人物都扮演着特定的角色.例如,Snail Bait 有跑步小人(游戏主角).硬币.红宝石.蓝宝石.蜜蜂.蝙蝠.纽扣和一个蜗牛,图 1 中展示了其中的大多数角色.在本系列的第 1 篇文章中,已经介绍了这些人物以及它们在游戏中的角色. 图 1. Snail Bait 的人物&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp; Snail Bait 中每个

《HTML5游戏编程核心技术与实战》——第1章 游戏和HTML5初探1.1 网页游戏和HTML5

第1章 游戏和HTML5初探 从时间上来计算,游戏行业从诞生到现在还不到100年历史,跟其他传统的行业相比,它甚至就像襁褓中的婴儿一样小,但正是这婴儿,正逐渐挑战着众多的传统行业.现在,很多人都会在不同的时刻玩着不同的游戏,也许你正在虚拟的网络游戏中热血澎湃地战斗,也许你正在电子游戏竞技中展现你的人生价值,也许你在忙碌的工作后,玩着切水果游戏不停地发泄,总之,你会感受到,它正在悄然融入到我们的生活当中,正在成为你生活的一部分. 随着新一代Web开发标准--HTML5诞生,各大浏览器厂商和软件厂商

《Java 2D游戏编程入门》—— 2.1 处理键盘输入

2.1 处理键盘输入 在大多数应用程序中,软件都不需要处理键盘事件.当某些事情发生变化的时候,由任意的组件(如文本框)来处理输入并通知软件.但是,大多数计算机游戏使用键盘不是为了录入,而是为了游戏输入.根据游戏的不同,虽然可能会有录入,但键盘按键常用做方向键和发射激光武器.很多计算机游戏具有不同的输入配置,并且有些游戏甚至允许用户根据自己的意愿来设置按键.不管游戏如何使用键盘(并且它可能采用一种全新的方式来使用键盘,监听键盘事件的常用方法都不适用于游戏循环程序设计. Swing组件允许在实现了K

视频网站切入游戏领域 潜在用户适合专向营销

中介交易 SEO诊断 淘宝客 云主机 技术大厅 速途网11月14日消息 随着互联网的快速发展,作为文化创意产业的"游戏业"如今已经渗透到了很多行业.在盈利方面略显欠缺的视频行业,随着版权费用的增加,在近两年已有部分网站转型主打游戏. 据悉,如今PPS.风行.快播.迅雷.等客户端视频平台已纷纷联运网页游戏,而酷6由于背靠盛大集团,相关消息人士透露,该公司已组建专门的研发团队.搜狐.新浪.腾讯.网易等门户视频则已有游戏业务. 视频网站切入游戏领域 一到两年广告营收仍是核心 "其实

Q+平台率先支持HTML5,接入4款游戏应用

中介交易 SEO诊断 淘宝客 云主机 技术大厅 近日,腾讯Q+开放平台联合磊友科技宣布上线4款HTML5游戏应用,在HTML5领域率先出招. 腾讯即通线负责人殷宇表示,HTML5 是下一代 Web 语言,也是下一代富网络应用技术标准,它为Web 提供了全新的框架和平台,统一了桌面和移动平台的Web浏览体验,可以帮助开发者实现真正的跨平台开发.腾讯Q+看好HTML5的未来前景,从去年开始就支持这一技术标准.未来,Q+将大力支持开发商开发相关应用,共同推动新技术的应用和普及. 4款游戏尽显HTML5