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

Project1

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

[有事请教] 关于如何判断文件名称

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2593
在线时间
243 小时
注册时间
2023-11-16
帖子
115
跳转到指定楼层
1
发表于 2024-5-10 08:41:39 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
最近在写一个新的立绘插件,我打算直接用文件名正则来判断是否是立绘,以此来免除繁杂的设置。
我写了path模块来获取文件名,不过这貌似会导致浏览器环境无法运行?有没有更好的解决办法

Lv3.寻梦者

梦石
0
星屑
2015
在线时间
602 小时
注册时间
2012-4-8
帖子
426
13
发表于 2024-5-11 11:51:31 | 只看该作者
kyjoke 发表于 2024-5-11 02:48
我最不明白的就是rm原生的读取文件了,毕竟我才用了rm几个月,所以我才想要示范的代码 ...

很短的,你就看一看代码就行了,全文搜索很快的呀

保存本地文件 rm 做了文件名拦截,只能用 id 来存游戏文件,你取消掉这部分就是自定义文件保存了
判断文件是否存在也有了 existsSync

  1. StorageManager.saveToLocalFile = function(savefileId, json) {
  2.     var data = LZString.compressToBase64(json);
  3.     var fs = require('fs');
  4.     var dirPath = this.localFileDirectoryPath();
  5.     var filePath = this.localFilePath(savefileId);
  6.     if (!fs.existsSync(dirPath)) {
  7.         fs.mkdirSync(dirPath);
  8.     }
  9.     fs.writeFileSync(filePath, data);
  10. };

  11. StorageManager.loadFromLocalFile = function(savefileId) {
  12.     var data = null;
  13.     var fs = require('fs');
  14.     var filePath = this.localFilePath(savefileId);
  15.     if (fs.existsSync(filePath)) {
  16.         data = fs.readFileSync(filePath, { encoding: 'utf8' });
  17.     }
  18.     return LZString.decompressFromBase64(data);
  19. };

  20. StorageManager.localFilePath = function(savefileId) {
  21.     var name;
  22.     if (savefileId < 0) {
  23.         name = 'config.rpgsave';
  24.     } else if (savefileId === 0) {
  25.         name = 'global.rpgsave';
  26.     } else {
  27.         name = 'file%1.rpgsave'.format(savefileId);
  28.     }
  29.     return this.localFileDirectoryPath() + name;
  30. };
复制代码

pokemon 和 digimon 正在路上
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2015
在线时间
602 小时
注册时间
2012-4-8
帖子
426
12
发表于 2024-5-11 11:47:47 | 只看该作者
本帖最后由 505681468 于 2024-5-11 11:54 编辑
小秋橙 发表于 2024-5-11 07:46
感觉整层楼在讨论的问题都非常奇怪…既然rm运行时无法“对存档以外的目录一股脑读取完再列出所有文件名” ...


是的,现在这部分他已经走完了
在pc上获取目录下的文件名,正则匹配做数据解析,已经做了

他的问题是,在非PC端无法获取文件名

点评

浏览器不行,所以推荐他做数据烘焙,开发的时候脚本生成配置,部署发布的时候就有数据了。安卓可以读文件,IOS不知道,浏览器应该很少人部署吧  发表于 2024-5-11 22:42
平时没必要,只是他的插件想做这样的效果,不用用户手动配置,改为读取文件列表,脚本自动生成配置  发表于 2024-5-11 22:40
rm运行时有获取文件列表的必要么(除了存读档页面),编辑器才需要吧,楼主说了自己要获取的是立绘图片文件…pc端用ls命令可以获取,但浏览器呢?   发表于 2024-5-11 22:19
不是“不指定文件名而加载文件”,而是“代码获取指定目录下的文件列表”,RM是可以获取目录下的文件列表的,PC 走 nwjs 的 fs 和 path 就行了  发表于 2024-5-11 20:02
不不不,rm是“无法在不指定文件名的情况下加载文件”的(包括MapXxx.json)所以楼主现在应该仿照rm对于行走图文件名开头的!和$的判断一样处理啊。  发表于 2024-5-11 18:47
pokemon 和 digimon 正在路上
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7223
在线时间
473 小时
注册时间
2021-12-4
帖子
511
11
发表于 2024-5-11 07:46:29 | 只看该作者
505681468 发表于 2024-5-11 02:19
简单点就走原生rm读取文件,然后分析,生成配置文件,走PC存档方法保存
然后重开游戏,走原生生成data对 ...

感觉整层楼在讨论的问题都非常奇怪…既然rm运行时无法“对存档以外的目录一股脑读取完再列出所有文件名”,那不就意味着“在json文件或插件参数中提供了文件名再去加载”吗?如果是这样的话应该对这个已知的文件名做正则匹配才对啊…
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2593
在线时间
243 小时
注册时间
2023-11-16
帖子
115
10
 楼主| 发表于 2024-5-11 02:48:08 | 只看该作者
505681468 发表于 2024-5-11 02:19
简单点就走原生rm读取文件,然后分析,生成配置文件,走PC存档方法保存
然后重开游戏,走原生生成data对 ...

我最不明白的就是rm原生的读取文件了,毕竟我才用了rm几个月,所以我才想要示范的代码
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2015
在线时间
602 小时
注册时间
2012-4-8
帖子
426
9
发表于 2024-5-11 02:19:56 | 只看该作者
kyjoke 发表于 2024-5-11 01:40
哦?不过我不是很懂如何具体操作,有范例的代码吗?我只是在获取文件名这步用到了node模块,如果代码不是 ...

简单点就走原生rm读取文件,然后分析,生成配置文件,走PC存档方法保存
然后重开游戏,走原生生成data对象的时候,就有配置数据了
之后部署/发布游戏之前记得生成配置文件就好了

你已经能正常获取文件列表,走完配置分析了,然后把配置结果保存就行了
参考存档保存 StorageManager.saveToLocalFile

pokemon 和 digimon 正在路上
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2593
在线时间
243 小时
注册时间
2023-11-16
帖子
115
8
 楼主| 发表于 2024-5-11 01:40:03 | 只看该作者
505681468 发表于 2024-5-11 01:36
不用配置,你可以用js脚本读取文件列表,生成json配置文件(也可以不用)
做个中间层,在游戏读取data构 ...

哦?不过我不是很懂如何具体操作,有范例的代码吗?我只是在获取文件名这步用到了node模块,如果代码不是很复杂,应该是可以改成这样式的。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2015
在线时间
602 小时
注册时间
2012-4-8
帖子
426
7
发表于 2024-5-11 01:36:17 | 只看该作者
kyjoke 发表于 2024-5-11 01:01
手动写配置的话那就又麻烦了,像三十烷的那个序列帧插件,有多少帧就得写多少帧。我搞的要是和其他插件一 ...


不用配置,你可以用js脚本读取文件列表,生成json配置文件(也可以不用)
做个中间层,在游戏读取data构造游戏data对象的时候,加一层插件配置的数据应用
或者直接写入原生的data配置,例如 actors 的 note,这样就可以走原生的 meta 了

就是把你的插件本来要自动分析的结果,保存成配置而已
pokemon 和 digimon 正在路上
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2593
在线时间
243 小时
注册时间
2023-11-16
帖子
115
6
 楼主| 发表于 2024-5-11 01:01:24 | 只看该作者
505681468 发表于 2024-5-10 23:52
原生没有,rm源码我也贴了
对于非 nwjs 是通过 localStorage 浏览器储存来实现文件保存的
通过 url 访问 ...

手动写配置的话那就又麻烦了,像三十烷的那个序列帧插件,有多少帧就得写多少帧。我搞的要是和其他插件一样麻烦的话实属是写了等于没写
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2015
在线时间
602 小时
注册时间
2012-4-8
帖子
426
5
发表于 2024-5-10 23:52:50 | 只看该作者
kyjoke 发表于 2024-5-10 22:36
虽然我不需要手机和浏览器端,不过我是考虑发布给大家用的时候的兼容性的。
我打算写一个可以全场景界面 ...


原生没有,rm源码我也贴了
对于非 nwjs 是通过 localStorage 浏览器储存来实现文件保存的
通过 url 访问来读取文件的,原生并没有读取文件属性的方法

读取文件名称和判断文件是否存在都是一样的,读取文件属性而不是读取文件
还有就是浏览器/安卓的环境不一样,安卓比浏览器多了安卓文件访问,它两的测试环境不通用

原生对于非pc端,或者说非 nwjs 端没有文件访问
相对于对每个平台都做文件访问接口,做配置文件烘焙或者会更好
在部署游戏前,执行你插件的方法,生成配置文件
pokemon 和 digimon 正在路上
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-13 09:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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