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

Project1

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

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

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

Lv4.逐梦者

梦石
0
星屑
7458
在线时间
1448 小时
注册时间
2018-12-16
帖子
2040
跳转到指定楼层
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
星屑
42464
在线时间
7606 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

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

回帖奖励 +10 星屑

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

点评

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

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
11180
在线时间
2066 小时
注册时间
2013-6-10
帖子
1516
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
星屑
42464
在线时间
7606 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

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
星屑
1339
在线时间
69 小时
注册时间
2010-12-22
帖子
124
5
发表于 2022-11-4 17:29:36 | 只看该作者

回帖奖励 +10 星屑

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

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4224
在线时间
509 小时
注册时间
2011-3-26
帖子
110
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
回复 支持 0 反对 1

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
22
在线时间
0 小时
注册时间
2023-10-6
帖子
1
7
发表于 2024-6-14 21:48:46 | 只看该作者

回帖奖励 +10 星屑

这个话题没有后续了嘛

点评

我找过STEAM.itch.有没有人写出来出售[RMMV.HTML5打包.js.gz的工具]结果当前都没有.我觉得须求很大说...  发表于 2024-6-15 13:16
unity 打包 js.gz 的线上范例:https://file.u77.games/zh-cn/0906/Pixel-Survivors/index.html  发表于 2024-6-15 13:01
我看unity有个工具可以ˊ直接打包.js.gz出输html5,但是RMMV都没有....所以那不是插件.应该算输出工具...  发表于 2024-6-15 08:02
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
969
在线时间
130 小时
注册时间
2024-5-22
帖子
87
8
发表于 2024-6-15 13:36:02 | 只看该作者

回帖奖励 +10 星屑

我觉着与其如此不如找个缓存的插件把重要的图片音效资源都缓存了,这样下载的时候直接读取浏览器缓存了。图片啥的基本都是png,zip也压缩不了多少。
之前写过一个用jszip的小页游,不过那个尺寸比较小,只有几M,我把所有的资源都读到内存,文本用字符串,图片直接转成base64字符串,音乐用uint8array或者arraybuffer存储,用AudioContex播放……

点评

RMMV的缓存插件基本都不好用.....都要你在插件的地方设置你想缓存的[所有文件的名称]非常烦.你多一个档就要多指定一次  发表于 2024-6-15 14:14
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
41
在线时间
5 小时
注册时间
2024-6-15
帖子
8
9
发表于 2024-6-15 18:50:00 | 只看该作者

回帖奖励 +10 星屑

我觉得你的需求是实现 MV 游戏的离线缓存,使玩家可以像本地一样地体验游戏。

这里我推荐使用 Service Worker 和 Appcache (旧浏览器回退)技术。不过要求网站必须启用 HTTPS 安全协议才能使用。

直接用 zip 文件的方式可能不太合适,因为手机浏览器加载超过 275MB 的文件可能会出现问题。还有就是网页上解压 zip 的速度并不是很快。

有一个可以通过 HTML5 的 File API 实现读取用户本地 zip 或 apk 文件 , 从而运行 RMMV 游戏的实现。如果有兴趣的话可以私聊我!(免费的)
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2023
在线时间
602 小时
注册时间
2012-4-8
帖子
426
10
发表于 2024-6-15 19:54:35 | 只看该作者

回帖奖励 +10 星屑

看着像是小程序那种,先打开一个页面做下载器,更新下载游戏文件,下载完毕后再进入游戏

点评

缓存找不到文件不行吧,页面/资源都是要下载下来才能被浏览器加载/使用,还是说是手机上没有文件,而是以非文件/非明文保存在浏览器数据库里?  发表于 2024-6-16 22:12
就是不想让他下载到手机就可以玩...一定要在某个网址上面玩...但是又要可以用成jz.gz , 最后浏览器TEMP又找不到这个档.... >_<  发表于 2024-6-16 21:51
有点不太明白,是否单机应该不影响下载数据包的功能,搭建服务器放文件,安卓下载文件或者暴露文件接口给rmjs下载文件,类似于PC端的热更新插件  发表于 2024-6-16 18:34
有一点不一样的就是 js, 可以锁游戏 只有在某个网址上面才可以跑游戏. 你下载到本机之后就变单机游戏了.  发表于 2024-6-16 15:25
pokemon 和 digimon 正在路上
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-30 20:11

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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