赞 | 11 |
VIP | 302 |
好人卡 | 162 |
积分 | 62 |
经验 | 108302 |
最后登录 | 2024-11-21 |
在线时间 | 6593 小时 |
Lv4.逐梦者 醉啸 长风万里
- 梦石
- 0
- 星屑
- 6167
- 在线时间
- 6593 小时
- 注册时间
- 2007-12-16
- 帖子
- 4501
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
以前的VXMTV脚本已经失踪,我整合了一下XP的- #==============================================================================
- # 本脚本来自www.66RPG.com,使用和转载请保留此信息
- #==============================================================================
- # ------------------------------------------------------------------------
- # 高精度计时器 by FantasyDR
- # ------------------------------------------------------------------------
- # E-mail: [email protected]
- # ------------------------------------------------------------------------
- # 2005.10.18
- # ------------------------------------------------------------------------
- # 该类已经被定义为全局变量 $sys_timer
- # 如果只需要精确到毫秒,请设置初始化参数为true
- # decimal属性设置返回时间值的小数位数。
- # ------------------------------------------------------------------------
- # 下面是一些有用的方法列表,调用时写:$sys_timer.方法名
- # 例如 $sys_timer.clear()
- # ------------------------------------------------------------------------
- # clear() :计时器清零
- # now() :获取当前经过的时间,单位毫秒
- # now_s() :获取当前经过的时间,单位秒
- # ------------------------------------------------------------------------
- class SystemTimer
- attr_accessor:decimal #小数位数设定,默认为3
- def initialize(use_GetTime=false)
- # 初始化,根据系统选择不同精度计时器
- @qpFrequency = Win32API.new("kernel32","QueryPerformanceFrequency",'p','L')
- @qpCounter = Win32API.new("kernel32","QueryPerformanceCounter",'p','L')
- @tGetTime = Win32API.new("winmm","timeGetTime",'','L')
- @decimal=3
- @perf_cnt=" " * 8
- @time_start=" " * 8
- @time_now=" " * 8
- result = @qpFrequency.call(@perf_cnt)
- if use_GetTime
- result = 0
- end
- if result!=0
- @perf_flag=true
- else
- @perf_flag=false
- @perf_cnt=[1000,0].pack('LL')
- end
- #设置时间比例因数
- @time_scale=@perf_cnt.unpack('LL')
- @time_scale[0] /= 1000.0
- @time_scale[1] /= 1000.0
- #起始时间清零
- self.clear()
- end
- #-=====================-#
- # 计时器清零
- #-=====================-#
- def clear()
- if @perf_flag
- @qpCounter.call(@time_start)
- else
- @time_start=[@tGetTime.call(),0].pack('LL')
- end
- end
- #-==============================-#
- # 获取当前经过的时间,单位毫秒
- #-==============================-#
- def now()
- now_time = 0.0e1
- now_time += self.timer() - self.start()
- now_time /= self.scale()
- return self.debug(now_time)
- end
- #-==============================-#
- # 获取当前经过的时间,单位秒
- #-==============================-#
- def now_s()
- now_time = 0.0e1
- now_time += self.timer() - self.start()
- now_time /= (self.scale()*1000)
- return self.debug(now_time)
- end
- #-==============================-#
- # 帧错...
- #-==============================-#
- def debug(now_time)
- if @decimal>0
- now_time = (now_time * (10**@decimal)).floor/(10.0**@decimal)
- else
- now_time = now_time.floor
- end
- return now_time
- #以下用于debug模式
- if now_time < 0
- p "Timer Wrong!! Clear...",now_time,\
- @perf_flag,@qpCounter,@tGetTime,
- @time_now.unpack('LL')[0],@time_now.unpack('LL')[1],
- @time_start.unpack('LL')[0],@time_start.unpack('LL')[1]
- self.clear()
- return 0.0
- else
- return now_time
- end
- end
- #-=====================-#
- # 获取时间比例因数
- #-=====================-#
- def scale()
- return @time_scale[0]+\
- @time_scale[1]*0xffffffff
- end
- #-=====================-#
- # 获取起始滴答数
- #-=====================-#
- def start()
- return @time_start.unpack('LL')[0]+\
- @time_start.unpack('LL')[1]*0xffffffff
- end
- #-=====================-#
- # 获取当前的嘀哒数
- #-=====================-#
- def timer()
- if @perf_flag
- @qpCounter.call(@time_now)
- else
- @time_now=[@tGetTime.call(),0].pack('LL')
- end
- return @time_now.unpack('LL')[0]+\
- @time_now.unpack('LL')[1]*0xffffffff
- end
- end
- #-------------------------------------#
- # 初始化自身成一个全局变量
- #-------------------------------------#
- $sys_timer=SystemTimer.new()
- #-------------------------------------#
-
- #==============================================================================
- # 本脚本来自www.66RPG.com,使用和转载请保留此信息
- #==============================================================================
- #==============================================================================
- # 仭 EasyConv module - Ver 0.90
- #------------------------------------------------------------------------------
- # Moonlight INN
- # http://cgi.members.interq.or.jp/aquarius/rasetsu/
- # RaTTiE
- # [email protected]
- #------------------------------------------------------------
- # EasyConv::s2u(text) : S-JIS -> UTF-8
- # EasyConv::u2s(text) : UTF-8 -> S-JIS
- #==============================================================================
- module EasyConv
- # API梡掕悢掕媊
- CP_ACP = 0
- CP_UTF8 = 65001
- #--------------------------------------------------------------------------
- # 仠 S-JIS -> UTF-8
- #--------------------------------------------------------------------------
- def s2u(text)
- # API掕媊
- m2w = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
- w2m = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
- # S-JIS -> Unicode
- len = m2w.call(CP_ACP, 0, text, -1, nil, 0);
- buf = "\0" * (len*2)
- m2w.call(CP_ACP, 0, text, -1, buf, buf.size/2);
- # Unicode -> UTF-8
- len = w2m.call(CP_UTF8, 0, buf, -1, nil, 0, nil, nil);
- ret = "\0" * len
- w2m.call(CP_UTF8, 0, buf, -1, ret, ret.size, nil, nil);
-
- return ret
- end
- # module_function偲偟偰岞奐
- module_function :s2u
- #--------------------------------------------------------------------------
- # 仠 UTF-8 -> S-JIS
- #--------------------------------------------------------------------------
- def u2s(text)
- # API掕媊
- m2w = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
- w2m = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
- # UTF-8 -> Unicode
- len = m2w.call(CP_UTF8, 0, text, -1, nil, 0);
- buf = "\0" * (len*2)
- m2w.call(CP_UTF8, 0, text, -1, buf, buf.size/2);
- # Unicode -> S-JIS
- len = w2m.call(CP_ACP, 0, buf, -1, nil, 0, nil, nil);
- ret = "\0" * len
- w2m.call(CP_ACP, 0, buf, -1, ret, ret.size, nil, nil);
-
- return ret
- end
- # module_function偲偟偰岞奐
- module_function :u2s
- end
- #=================================================================
- # MTV 脚本,by 66RPG_柳柳
- #=================================================================
- module MTV
- #===============================================================
- # 读取文件。文件相对地址:Audio/BGM
- # file_name:文件名;length:MTV长度,按照.1秒为单位记数
- #===============================================================
- def self.load(file_name,length = 0)
- $mtv_time = []
- $mtv_text = []
- $game_system.mtv_length = length
- #=============================================================
- # 打开文件并且读取之
- #=============================================================
- file = File.open("Audio/BGM/"+file_name)
- #=============================================================
- # 读取歌词
- #=============================================================
- for line in file.readlines
- #===========================================================
- # 转为UTF-8编码
- #===========================================================
- line = EasyConv.s2u(line)
- #===========================================================
- # 寻找本行歌词
- #===========================================================
- this_line_text = line[line.scan(/\]/).size*10,line.size]
- #===========================================================
- # 把读取的行分存成时间与文字
- #===========================================================
- for i in 0...line.scan(/\]/).size
- temp_b = line[i*10+1,8]
- temp_c = temp_b.split(/:/)[0]
- mmsecond = 600 * temp_c.to_i
- temp_c = temp_b.split(/:/)[1]
- mmsecond += 10 * temp_c.to_f
- $mtv_time.push(mmsecond.to_i)
- $mtv_text.push(this_line_text)
- end
- end
- file.close
- end
- #===============================================================
- # 开始MTV字幕
- #===============================================================
- def self.mtv_begin
- $game_system.mtv_now = true
- $game_system.mtv_begin_time = $sys_timer.now()
- $lrc_text = ""
- return
- end
- #===============================================================
- # 结束MTV字幕
- #===============================================================
- def self.stop
- $game_system.mtv_now = false
- return
- end
- #===============================================================
- # 测试MTV是否播放
- #===============================================================
- def self.mtv?
- return $game_system.mtv_now
- end
- #===============================================================
- # 获取MTV字幕
- #===============================================================
- def self.new_text
- if $game_system.mtv_now
- #===========================================================
- # 求出已经经过的时间
- #===========================================================
- nt = $sys_timer.now()
- nt -= $game_system.mtv_begin_time
- nt = nt.to_i
- nt /= 100
- #===========================================================
- # 制作循环
- #===========================================================
- if $game_system.mtv_length>0 and nt > $game_system.mtv_length
- nt -= $game_system.mtv_length
- end
- #===========================================================
- # 放出字幕
- #===========================================================
- for tm in 0...$mtv_time.size
- if $mtv_time[tm] == nt
- $lrc_text = $mtv_text[tm]
- break
- end
- end
- else
- $lrc_text = ""
- end
- end
- end
- #==============================================================================
- # ■ Game_System
- #------------------------------------------------------------------------------
- # 处理系统附属数据的类。也可执行诸如 BGM 管理之类的功能。本类的实例请参考
- # $game_system 。
- #==============================================================================
- class Game_System
- #--------------------------------------------------------------------------
- # ● 定义实例变量
- #--------------------------------------------------------------------------
- attr_accessor :mtv_begin_time
- attr_accessor :mtv_now
- attr_accessor :mtv_length
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- alias mtv_gamesystem_initialize initialize
- def initialize
- mtv_gamesystem_initialize
- @mtv_begin_time = $sys_timer.now()
- @mtv_now = false
- @mtv_length = 0
- end
- end
- #==============================================================================
- # ■ Scene_Map
- #------------------------------------------------------------------------------
- # 处理地图画面的类。
- #==============================================================================
- class Scene_Map
- #--------------------------------------------------------------------------
- # ● 刷新画面
- #--------------------------------------------------------------------------
- alias mtv_scenemap_update update
- def update
- @mtv_window.refresh
- mtv_scenemap_update
- end
- #--------------------------------------------------------------------------
- # ● 主处理
- #--------------------------------------------------------------------------
- alias mtv_scenemap_main main
- def main
- @mtv_window = Window_MTV.new
- mtv_scenemap_main
- @mtv_window.dispose
- end
- #--------------------------------------------------------------------------
- # ● 调用战斗 (调整自动切换BGM)
- #--------------------------------------------------------------------------
- def call_battle
- gtbs_call_battle
- if $game_system.tbs_enabled
- $scene = Scene_Battle.new
- end
- end
- end
- #==============================================================================
- # ■ Scene_Battle
- #------------------------------------------------------------------------------
- # 处理战斗的类。
- #==============================================================================
- class Scene_Battle_TBS
- #--------------------------------------------------------------------------
- # ● 刷新画面
- #--------------------------------------------------------------------------
- alias mtv_scenebattle_update update
- def update
- @mtv_window.refresh
- mtv_scenebattle_update
- end
- #--------------------------------------------------------------------------
- # ● 主处理
- #--------------------------------------------------------------------------
- alias mtv_scenebattle_main main
- def main
- @mtv_window = Window_MTV.new
- mtv_scenebattle_main
- @mtv_window.dispose
- end
- end
- #==============================================================================
- # ■ Window_MTV
- #------------------------------------------------------------------------------
- # 显示MTV字幕的窗口。
- #==============================================================================
- class Window_MTV < Window_Base
- #--------------------------------------------------------------------------
- # ● 初始化窗口
- #--------------------------------------------------------------------------
- def initialize
- super(0, 0, 544+64, 64)
- self.contents = Bitmap.new(width - 32, height - 32)
- $lrc_text = ""
- self.z = 9999
- refresh
- end
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh(text = "")
- MTV.new_text
- self.contents.clear
- if $game_temp.in_battle
- self.opacity = 0
- else
- self.opacity = 0
- end
- self.contents.font.color = Color.new(0,0,0,255)
- self.contents.draw_text(-11, 1, 512+64, 32, $lrc_text, 2)
- self.contents.font.color = Color.new(255,255,255,255)
- self.contents.draw_text(-10, 0, 512+64, 32, $lrc_text, 2)
- end
- end
复制代码 使用方法和XP的一样
范例工程就不提供了 |
|