设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2181|回复: 14
打印 上一主题 下一主题

[有事请教] 如何在.ZIP跑index.html(跑RMMV游戏) ?

[复制链接]
回帖奖励 60 星屑 回复本帖可获得 10 星屑奖励! 每人限 1 次

Lv4.逐梦者

梦石
0
星屑
7238
在线时间
1371 小时
注册时间
2018-12-16
帖子
1952
跳转到指定楼层
1
发表于 2022-10-29 21:35:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 play337 于 2022-10-29 23:51 编辑

如何在.ZIP跑index.html(跑RMMV游戏) ?

你开始玩游戏的时候 会有一个 [ RUN GAME ]
按下去之后
01.会先下载你的 .ZIP 文档
02.解压缩 .ZIP 文档到你的浏览器暂存目录
03.然后开始以超快的速度运行你的游戏. 都不需要在下载任何文档
04.也就是不会玩到一半一直下载图片.JSON.声音档等等

就是一个前导....

可以在WEB里面跑 .ZIP (包含index.html 文档) 的 js 前导 !!!!

这样我就可以把我的 RPG MAKER MV 的项目
01.压缩成一个 .ZIP(文档变小/降低游戏传输时间)
02.把游戏通通放在浏览器暂存下面跑.都不需要再下载游戏了

请问各位大神.... 你们有看过这样的前导JS FOR WEB 可以下载吗?

==============================================
这两种比较象....

01.
https://rowadz.github.io/caskbrewer/

02
https://yomotsu.github.io/ZipLoader/examples/index.html

不过竟然除了演示....甚麽都不能跑..



Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
40229
在线时间
7508 小时
注册时间
2009-7-6
帖子
13489

开拓者贵宾

2
发表于 2022-10-30 13:58:14 | 只看该作者

回帖奖励 +10 星屑

不压缩的目的就是按需下载,压缩之后必须全部下载才能进行游戏,显然不是更好的选择

点评

按需下载的结果就是[又需要了+又需要了+又需要了]一直在那边下载.全部下载就是[等一下之后就是快].一个是DIRECT.一个是TURBO  发表于 2022-10-30 14:19
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
10833
在线时间
2041 小时
注册时间
2013-6-10
帖子
1500
3
发表于 2022-10-30 18:32:40 | 只看该作者

回帖奖励 +10 星屑

fux2 发表于 2022-10-30 13:58
不压缩的目的就是按需下载,压缩之后必须全部下载才能进行游戏,显然不是更好的选择 ...

话说这种服务器端只留一个压缩包,客户端把压缩包加载过来并解压,然后游戏所有资源就都加载好了的方法真的可行吗?(js实现的话

浅想一下,我认为这个过程存在一个问题:浏览器下载解压肯定可以做到,把解压出来的index.html呈现到浏览器上也没问题,问题就是index.html作为入口文件,它所关联的外链文件(如各种js、css等)虽然也都随着压缩包解压了,但是是在客户端而不在服务器端,这就会导致客户端的index.html在运行时关联不到文件,毕竟服务器上只有一个压缩包不是吗。

还是说是有什么办法可以应用解压出来的那些资源?

点评

zip.js,ZipLoader.js,browserfs.js...还有好多好多都是在做这个事情的...问题是支不支持RMMV的游戏而已...  发表于 2022-10-30 22:22
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
40229
在线时间
7508 小时
注册时间
2009-7-6
帖子
13489

开拓者贵宾

4
发表于 2022-10-30 18:59:16 | 只看该作者
小怪兽奇奇侠 发表于 2022-10-30 18:32
话说这种服务器端只留一个压缩包,客户端把压缩包加载过来并解压,然后游戏所有资源就都加载好了的方法真 ...

连楼主的问题一起回答了

硬要做到可以,搜一下zip.js引入就可以了,我在其他地方(h5mota.com)这样的在线H5魔塔网站玩的时候他们就用的这种方法,但这是因为魔塔一般体量比较小,下载不需要太长时间。

RM这种动辄几百M起步的我认为用户不是很能等得起

zip.js地址
https://github.com/gildas-lormeau/zip.js

点评

zip.js GITHUB 程度不够看不懂...他都没有一个范例的网页..像: https://rowadz.github.io/caskbrewer/  发表于 2022-10-31 07:29
不要去参考h5mota啊,只是举个栗子而已,看github的范例就可以了  发表于 2022-10-31 00:53
请问 h5mota.com 里面的哪一个游戏用到这个功能呢?...我按了好几个...看了一下他都是直接玩..但是它源文件又有zip.min.js ...我推测不是每个游戏都用到.....  发表于 2022-10-30 22:45
本来已经死心了.你竟然又贴出了一个希望给我...让我来测试看看你贴的这个能不能跑! ^__^  发表于 2022-10-30 22:23
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1313
在线时间
68 小时
注册时间
2010-12-22
帖子
121
5
发表于 2022-11-4 17:29:36 | 只看该作者

回帖奖励 +10 星屑

好问题,一同参与学习。。。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4929
在线时间
445 小时
注册时间
2011-3-26
帖子
101
6
发表于 2022-11-8 11:55:49 | 只看该作者

回帖奖励 +10 星屑

本帖最后由 rfvtgbzxc 于 2022-11-8 14:07 编辑

结论:可行,部分内容已自己实现过,部分内容有待实践。最终结果和你的问题的目标略有出入,即玩家还是必须要有最初的index.html,但是其他文件都可以放在数据包里。

方案:
1.利用IndexedDB作为存储方案
2.利用jszip直接管理读入的数据包
3.重写所有相关的访问api,改走jszip

详解:
1.浏览器这边没有读写用户文件系统的api,因此下载的zip不能像其他客户端程序那样被直接解压并放在文件系统里。但是浏览器是有让大文件持久化存储的api的——IndexedDB。MZ处理浏览器端存档的方案localforage就是使用了IndexedDB,理论上整个硬盘的空间都能用于IndexedDB存储,500MB的游戏不在话下。直接复用系统自带的localforage库即可轻松完成对IndexedDB的读写操作(直接用IndexedDB的api还是挺麻烦的)。但是单项Item似乎有大小限制,一个文件好像不能超过20+Mb,如果是Blob存储方式会大很多,我当时碰到存储限制后,把数据改用Blob存储了,就没有碰到超出的问题,不知道更大,大到500mb的一整个文件都放在条目里会不会有问题。但是这个问题不算大,大不了手动分块。所以整个游戏数据的存取就没有问题了。

2.现在读出了zip到内存中(以ArrayBuffer形式存在),要将其像平时打开zip文件那样使用它,我推荐使用jszip库。jszip库读取完这个zip后会生成一个像文件系统的对象,可以很容易获取里面的文件夹和文件,于是内部的文件也可以很容易被获取到。在没有压缩和加密的情况下,访问包内任意数据的速度基本上和从内存中访问源数据是一致的;有压缩的情况下,可能需要在下载数据后再多一步解压数据,再用无压缩的方式打包成压缩包才能保证运行速度。
这里有分歧,也可以不再压缩回去,而是直接用目录作为localforage的key进行存储和读取,这个方案的优劣有待讨论,如果localforage运行时有缓存差异就不大,没有的话,反复读取硬盘文件,性能可能会稍微差一点。

3.最后修改游戏内部读写文件的api,虽然要改的地方比较多,但是因为直接使用jszip的api,自己再封装一下promise请求,修改后的代码甚至可以比原来的更清爽,比如这是关于Data部分的存取代码:(其中Game.data就是一个jszip对象,包含了data目录下的所有内容)

  1. DataManager.loadDataFile = function (name, src) {
  2.     Game.data.file(src + ".json")
  3.       .async("string")
  4.       .then(dataJson => {
  5.         const obj = JSON.parse(dataJson);
  6.         window[name] = obj;
  7.         this.onLoad(obj);
  8.       })
  9.       .catch(e => {
  10.         this.onDataFetchError(name, src);
  11.       });
  12.   };
复制代码

点评

這裡有個簡單MV DEMO:https://www.mediafire.com/download/dk4u8vdctf3suu7/Title_Commands_MV_v.1.0_%28DEMO%29.zip  发表于 2022-11-8 23:35
项目和已经发布的加密游戏耦合,单独做出来挺麻烦的,未来有空发布。其实思路已经列出来了,顺着往下做应该碰不到什么难点。  发表于 2022-11-8 20:07
哇~ 大神~ 太强了~ 可以赐与一个DEMO GAME放在百度分享吗? 拜托~ ^_______^  发表于 2022-11-8 14:43
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-6-10 04:03

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表