Project1

标题: 【缓存】各位来讨论下RM的图片缓存技术 [打印本页]

作者: ky52879    时间: 2013-5-23 08:16
标题: 【缓存】各位来讨论下RM的图片缓存技术
各位,大家应该都知道RM系列的游戏都有一个Cache类,这个类里面提供了的全是图片的

缓存,也就是当图片第一次载入之后,以后就不需要再次载入了,也就是说图片已经保存

在RM的内存中了,这样既提高了效率,又可以达到统一管理的目的,那么令我奇怪的地方

是:Bitmap类都可以缓存,为什么Audio无法缓存呢?还是因为Audio文件太大了,放到缓存

中占用内存?这个估计不可能吧,还请各位前辈看下,有没有什么方法将Audio也放到缓存里,

这样的话如果在游戏一开始就加载所有Aduio,那么之后游戏就不会出现卡帧的想象了,

也就是会大大的加快了音乐的读取速度,各位前辈看看有没有什么好的方案或思路提供个?
作者: 爆发的妞    时间: 2013-5-23 09:30
缓存音频文件的确是个好想法。 不过程序应该很难实现。
图片他可以有一个类似于bitmap的东西来指代他,你就是那个图片。
而音乐他没有说有一个mp3来代替他, 不过程序有api来指定某个音频文件来播放。
所以也就缓存不了。 个人看法。
还有 图片不是一开始就加载完的,他是用到的时候才加载的,也就是所谓的懒加载。
作者: 晴兰    时间: 2013-5-23 14:17
提示: 作者被禁止或删除 内容自动屏蔽
作者: ky52879    时间: 2013-5-23 17:41
晴兰 发表于 2013-5-23 14:17
你需要从内存播放音乐的类

内存中播放音乐的类?RGSS的还是别的VC的?而且内存中播放音乐的话貌似都不支持OGG格式,前辈能否给我一段代码,我自己研究下?
作者: ky52879    时间: 2013-5-24 08:03
昨天试着重写了一个Audio模块,但是发现RM在加载音乐的时候并不是从内存中读取的,而是每次一都从本地文件中读取,所以不可能将Aduio封装成一个对象

来供其他地方使用,所以现在就卡在这了,有知道的前辈帮忙看下有没有这方面的技术实现下,大家集思广益嘛。。
作者: 无脑之人    时间: 2013-5-24 21:38
放音乐有很卡么……?
(比起来Bitmap类的那些图像处理这点时间算什么……)
没有对应的对象的话就不好弄了吧- =
作者: ky52879    时间: 2013-5-24 23:01
无脑之人 发表于 2013-5-24 21:38
放音乐有很卡么……?
(比起来Bitmap类的那些图像处理这点时间算什么……)
没有对应的对象的话就不好弄了 ...

确实啊,现在就是想找这一方面的技术研究下。。
PS:坐等前辈高手。。
作者: ky52879    时间: 2013-5-25 17:33
突然想到一个方法:能否将RGSS102J.DLL里面的播放音乐函数导出来呢?
PS:小弟技术暂时还不行,能否给个思路?
作者: ky52879    时间: 2013-5-27 20:42
无语。。。。还是走不通,不知道怎么导出函数,哪位前辈能告知下?
作者: nokaiwai    时间: 2013-5-30 07:59
之前我在製作一個音樂遊戲時有用到的一個
可以預先載入音檔 在播放時也好像沒有卡 但是在移動游標時(例如播完全首後再由頭重播)卻會卡
http://rpg.blue/thread-123477-1-1.html
作者: ky52879    时间: 2013-5-31 13:06
nokaiwai 发表于 2013-5-30 07:59
之前我在製作一個音樂遊戲時有用到的一個
可以預先載入音檔 在播放時也好像沒有卡 但是在移動游標時(例如播 ...

无语。。。这个脚本不支持OGG格式。。。!!!!!!

PS:这个脚本只是一个音频扩展而已。。我是想加载到内存- -
作者: nokaiwai    时间: 2013-5-31 16:27
本帖最后由 nokaiwai 于 2013-5-31 20:39 编辑

有沒有認真看啊-.- 有SELF.OPEN的指令 好嗎?
已經測試過運行OPEN指令後 把載入了的音樂文件刪除 然後等5秒,也可以播放到該音樂 如果不是載進內存 難道是進到了顯存-.-???? 再說 看工作管理員 OPEN時內存用量有明顯提升 SELF.PLAY時只有少量提升





個人對OGG格式沒什麼好感0.0
刪除是手動
RUBY 代码复制
  1. #~module AudioEx
  2.   #--------------------------------------------------------------------------
  3.   # ● 发送 open 命令,从文件打开一个设备
  4.   #     device          : 设备名称(标识)
  5.   #     filename        : 文件路径
  6.   #--------------------------------------------------------------------------
  7.   def self.open(device, filename)
  8.     error = $mciSendString.call("open \"#{filename}\" type mpegvideo alias #{device} wait".to_unicode, 0, 0, 0)
  9.     raise AudioExException.new(error) if error != 0
  10.     set(device, "time format milliseconds")
  11.     # 准备播放
  12.     cue(device)
  13.   end





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1