去年夏天,我担任了一款名为
SONAR
。该项目花了大约三个月的时间完成,并且完全是用JavaScript从头开始完成的。在SONAR的开发过程中,我们不得不在新的和未经测试的HTML5水域中找到许多问题的创新解决方案。特别是,我们需要一个看似简单的问题的解决方案:当玩家开始游戏时,我们如何下载和缓存70+MB的游戏数据?对于这个问题,其他平台有现成的解决方案。大多数游戏机和PC游戏从本地CD/DVD或硬盘驱动器加载资源。Flash可以将所有资源打包为包含游戏的SWF文件的一部分,Java可以对JAR文件执行相同的操作。Steam或AppStore等数字分发平台可确保在玩家开始游戏之前下载并安装所有资源。HTML5没有为我们提供这些机制,但它确实为我们提供了构建自己的游戏资源下载系统所需的所有工具。构建我们自己的系统的好处是我们获得了我们需要的所有控制和灵活性,并且可以构建一个完全符合我们需求的系统。
恢复
在我们有资源缓存之前,我们有一个简单的链式资源加载器。该系统允许我们通过相对路径请求单个资源,这反过来又可以请求更多资源。我们的加载屏幕显示了一个简单的进度表,用于衡量需要加载多少数据,并且仅在资源加载队列为空后才转换到下一个屏幕。该系统的设计使我们能够轻松地在打包资源和通过本地HTTP服务器提供的松散(未打包)资源之间切换,这确实有助于确保我们可以快速迭代游戏代码和数据。以下代码说明了我们的链式资源加载器的基本设计,其中删除了错误处理和更高级的XHR/图像加载代码以保持可读性。
functionResourceLoader(){this.pending=0;this.baseurl=./;this.on