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

Project1

 找回密码
 注册会员
搜索
查看: 89|回复: 5

[有事请教] ①获取se文件长度②module请教③脚本与事件等待

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2332
在线时间
363 小时
注册时间
2017-4-21
帖子
143
发表于 2019-1-10 21:57:59 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 阮声悠悠 于 2019-1-11 01:09 编辑

在地图上和怪兽对话,会执行:
播放一个se   Audio.se_play("Audio/SE/XX", 50, 100)
等待X贞   @wait_count = 20
如果怪兽数量太多,每一次都要测试等待的贞合不合适,挺麻烦
想请教下,有没有办法获取se的长度。。

第三个问题
用@wait_count = 10来等待10贞
实际上只是用事件等待5贞(一半)的长度
我想知道,这样正常吗。。。



已解决
第二个问题,是我想到的解决第一个问题的方法(其它便捷设置也会用到这个功能)
在main前插入脚本
RUBY 代码复制打印
  1. module DengDaiZhen
  2.   GS_001 = 21
  3.   GS_002 = 26
  4.   GS_003 = 14
  5. end

然后用事件脚本,调用等待的贞
b = "003"  #经过一系列运算后,b是文本,为“003”
@wait_count = DengDaiZhen::GS_b

问题是,怎么让DengDaiZhen::GS_b正确调用起来

Lv4.逐梦者

梦石
0
星屑
7727
在线时间
1596 小时
注册时间
2013-1-11
帖子
1083
发表于 2019-1-10 22:20:27 | 显示全部楼层
第二个方法:
  1. a = "002"
  2. @wait_count = eval("DengDaiZhen::GS_#{a}")
复制代码
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2332
在线时间
363 小时
注册时间
2017-4-21
帖子
143
 楼主| 发表于 2019-1-10 22:36:57 | 显示全部楼层


话说这样设置多了会不会变卡

又想到了另外一种方法:
在main前插入
RUBY 代码复制打印
  1. class DengDaiZhen
  2.   def initialize
  3.     $game_variables[118] = [0,
  4.     1,#
  5.     2,
  6.     110
  7.     ]
  8.   end
  9. end


然后事件脚本执行:
b = 3#经过一系列自动运算,得出3
DengDaiZhen.new
@wait_count = $game_variables[118]
也能做到同样的效果
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

梦石
0
星屑
3076
在线时间
4104 小时
注册时间
2013-6-21
帖子
3409

开拓者贵宾剧作品鉴家

发表于 4 天前 | 显示全部楼层
第三个问题:脚本和实现的帧长短有换算关系,时间中的1帧=脚本中的2帧。游戏的满帧是40fps(按照脚本方式计算)
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2018
在线时间
157 小时
注册时间
2017-9-28
帖子
37
发表于 4 天前 | 显示全部楼层
本帖最后由 hyrious 于 2019-1-16 00:30 编辑

第一个问题

在线的方法:
RUBY 代码复制打印
  1. def Audio.length(f)
  2.   mciSendString = Win32API.new('winmm', 'mciSendString', 'ppLp', 'i')
  3.   return 0 if mciSendString.call("open #{f.inspect} alias add8e6", '', 0, 0) != 0
  4.   mciSendString.call("status add8e6 length", (buf = [].pack('x128')), 128, 0)
  5.   mciSendString.call("close add8e6", "", 0, 0)
  6.   buf.to_i
  7. end

调用时传入绝对或相对路径,后缀也要带上,返回毫秒数,如果失败返回 0。
然而它不支持 OGG 格式(RTP 里都是 OGG 和 MID)
  1. Audio.length('D:/Sounds/A New Day No Mel.mp3') #=> 123456
复制代码

如果要支持无后缀和 RTP 内的素材的话,需要另外加脚本(见下)

当然,仔细想想你并不需要运行时拿这种数据,你可以事先在外面量好长度然后在工程里打个表
这叫离线的方法。

第二个问题
RUBY 代码复制打印
  1. DengDaiZhen.const_get(:"GS_#{b}")

当然这不是最佳方案,你可以使用 hash:
RUBY 代码复制打印
  1. module DengDaiZhen
  2.   GS = {
  3.     '001' => 21,
  4.     '002' => 26
  5.   }
  6. end
  7. DengDaiZhen::GS[b]


第三个问题见 rb 叔叔的答案


支持一下 RTP
RUBY 代码复制打印
  1. def ptr_to_ansi(pstr)
  2.   _RtlMoveMemory = Win32API.new('ntdll', 'RtlMoveMemory', 'pLL', 'v')
  3.   str = ''
  4.   char = ' '
  5.   while true
  6.     _RtlMoveMemory.call(char, pstr, 1)
  7.     break if char == "\0"
  8.     str += char
  9.     pstr += 1
  10.   end
  11.   str
  12. end
  13.  
  14. def expand_rtp(path)
  15.   _RGSSGetPathWithRTP = Win32API.new('RGSS104E', 'RGSSGetPathWithRTP', 'p', 'i') # 你可能想把 RGSS104E 改成 RGSS103J
  16.   ptr_to_ansi(_RGSSGetPathWithRTP.call(path))
  17. end
  18.  
  19. expand_rtp("Audio\\SE\\001-System01") #=> D:\SteamLibrary\steamapps\common\RPGXP\rtp\Audio\SE\001-System01.ogg
  20. Audio.length(expand_rtp("Audio\\SE\\001-System01")) #=> 0


可以来 API 组 学习更多醋虾 API 的玩法。

点评

喵喵喵你是不是忘了我的RTP检索  发表于 4 天前
回复 支持 反对

使用道具 举报

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

本版积分规则

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

站长信箱:fux2@moe9th.com|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2019-1-19 20:05

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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