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

Project1

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

[已经过期] 这个mtv脚本有每行都有“口” 1.02和1.03都有口

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
420 小时
注册时间
2011-3-13
帖子
251
跳转到指定楼层
1
发表于 2012-8-10 19:00:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 2000zs66rpg 于 2012-8-11 21:39 编辑
  1. #==============================================
  2. # 增加两个用来进行条件判断的临时变量
  3. #==============================================

  4. # 脚本:MTV.load("歌词.lrc")
  5. #演奏BGM:童话
  6. #脚本:MTV.mtv_begin
  7. #注意:必须是LRC格式
  8. #停止:MTV.stop,关掉歌词。BGM用事件关就行了
  9. #==============================================

  10. #设置文字颜色
  11. FONT_COLOR = Color.new(255,255,0,0) #这里指定RGB颜色
  12. FONT_SIZE = 20  #这个是字体的大小
  13. FONT_NAME = "楷体"

  14. #==============================================
  15. # 增加两个用来进行条件判断的临时变量
  16. #==============================================
  17. class Game_Temp
  18.    attr_accessor :old_text
  19.    attr_accessor :refresh_times
  20. alias meanfree_initialize initialize
  21.   def initialize
  22.     meanfree_initialize
  23.     @old_text = ""
  24.     @refresh_times = 0
  25.   end
  26. end

  27. module MTV  
  28. #===============================================================
  29. # 读取文件。文件相对地址:Audio/BGM
  30. # file_name:文件名;length:MTV长度,按照.1秒为单位记数
  31. #===============================================================
  32. def self.load(file_name,length = 0)
  33.   $mtv_time = []
  34.   $mtv_text = []
  35.   $game_system.mtv_length = length
  36.   #=============================================================
  37.   # 打开文件并且读取之
  38.   #=============================================================
  39.   file =  File.open("Audio/BGM/"+file_name)
  40.   #=============================================================
  41.   # 读取歌词
  42.   #=============================================================
  43.   for line in file.readlines
  44.     #===========================================================
  45.     # 转为UTF-8编码
  46.     #===========================================================
  47.     line = EasyConv.s2u(line)
  48.     #===========================================================
  49.     # 寻找本行歌词
  50.     #===========================================================
  51.     this_line_text = line[line.scan(/\]/).size*10,line.size]
  52.     #===========================================================
  53.     # 把读取的行分存成时间与文字
  54.     #===========================================================
  55.     for i in 0...line.scan(/\]/).size
  56.       temp_b = line[i*10+1,8]
  57.       temp_c = temp_b.split(/:/)[0]
  58.       mmsecond = 600 * temp_c.to_i
  59.       temp_c = temp_b.split(/:/)[1]
  60.       mmsecond += 10 * temp_c.to_f
  61.       $mtv_time.push(mmsecond.to_i)
  62.       $mtv_text.push(this_line_text)
  63.     end
  64.   end
  65.   file.close
  66. end
  67. #===============================================================
  68. # 开始MTV字幕
  69. #===============================================================
  70. def self.mtv_begin
  71.   $game_system.mtv_now = true
  72.   $game_system.mtv_begin_time = $sys_timer.now()
  73.   $lrc_text = ""
  74.   return
  75. end
  76. #===============================================================
  77. # 结束MTV字幕
  78. #===============================================================
  79. def self.stop
  80.   $game_system.mtv_now = false
  81.   return
  82. end
  83. #===============================================================
  84. # 测试MTV是否播放
  85. #===============================================================
  86. def self.mtv?
  87.   return $game_system.mtv_now
  88. end
  89. #===============================================================
  90. # 获取MTV字幕
  91. #===============================================================
  92. def self.new_text
  93.   if $game_system.mtv_now
  94.     #===========================================================
  95.     # 求出已经经过的时间
  96.     #===========================================================
  97.     nt = $sys_timer.now()
  98.     nt -= $game_system.mtv_begin_time
  99.     nt = nt.to_i
  100.     nt /= 100      
  101.     #===========================================================
  102.     # 制作循环
  103.     #===========================================================
  104.     if $game_system.mtv_length>0 and nt > $game_system.mtv_length
  105.       nt -= $game_system.mtv_length
  106.     end
  107.     #===========================================================
  108.     # 放出字幕
  109.     #===========================================================
  110.     for tm in 0...$mtv_time.size
  111.       if $mtv_time[tm] == nt
  112.         $lrc_text = $mtv_text[tm]
  113.         #=======================================
  114.         # 时间有限
  115.         $game_temp.old_text = $lrc_text
  116.         $game_temp.refresh_times += 1
  117.         # 面粉无敌
  118.         #=======================================
  119.         break
  120.       end
  121.     end
  122.   else
  123.     $lrc_text = ""
  124.   end
  125. end
  126. end
  127. # ------------------------------------------------------------------------
  128. # 高精度计时器 by FantasyDR
  129. # ------------------------------------------------------------------------
  130. # E-mail: [email protected]
  131. # ------------------------------------------------------------------------
  132. # 2005.10.18
  133. # ------------------------------------------------------------------------
  134. # 该类已经被定义为全局变量 $sys_timer
  135. # 如果只需要精确到毫秒,请设置初始化参数为true
  136. # decimal属性设置返回时间值的小数位数。
  137. # ------------------------------------------------------------------------
  138. # 下面是一些有用的方法列表,调用时写:$sys_timer.方法名
  139. # 例如 $sys_timer.clear()
  140. # ------------------------------------------------------------------------
  141. # clear() :计时器清零
  142. # now() :获取当前经过的时间,单位毫秒
  143. # now_s() :获取当前经过的时间,单位秒
  144. # ------------------------------------------------------------------------
  145. class SystemTimer
  146. attr_accessor:decimal #小数位数设定,默认为3

  147. def initialize(use_GetTime=false)
  148. # 初始化,根据系统选择不同精度计时器
  149. @qpFrequency = Win32API.new("kernel32","QueryPerformanceFrequency",'p','L')
  150. @qpCounter = Win32API.new("kernel32","QueryPerformanceCounter",'p','L')
  151. @tGetTime = Win32API.new("winmm","timeGetTime",'','L')

  152. @decimal=3
  153. @perf_cnt=" " * 8
  154. @time_start=" " * 8
  155. @time_now=" " * 8

  156. result = @qpFrequency.call(@perf_cnt)

  157. if use_GetTime
  158. result = 0
  159. end

  160. if result!=0
  161. @perf_flag=true
  162. else
  163. @perf_flag=false
  164. @perf_cnt=[1000,0].pack('LL')
  165. end

  166. #设置时间比例因数
  167. @time_scale=@perf_cnt.unpack('LL')
  168. @time_scale[0] /= 1000.0
  169. @time_scale[1] /= 1000.0

  170. #起始时间清零
  171. self.clear()
  172. end

  173. #-=====================-#
  174. # 计时器清零
  175. #-=====================-#
  176. def clear()
  177. if @perf_flag
  178. @qpCounter.call(@time_start)
  179. else
  180. @time_start=[@tGetTime.call(),0].pack('LL')
  181. end
  182. end

  183. #-==============================-#
  184. # 获取当前经过的时间,单位毫秒
  185. #-==============================-#
  186. def now()
  187. now_time = 0.0e1
  188. now_time += self.timer() - self.start()
  189. now_time /= self.scale()
  190. return self.debug(now_time)
  191. end

  192. #-==============================-#
  193. # 获取当前经过的时间,单位秒
  194. #-==============================-#
  195. def now_s()
  196. now_time = 0.0e1
  197. now_time += self.timer() - self.start()
  198. now_time /= (self.scale()*1000)
  199. return self.debug(now_time)
  200. end

  201. #-==============================-#
  202. # 帧错...
  203. #-==============================-#
  204. def debug(now_time)
  205. if @decimal>0
  206. now_time = (now_time * (10**@decimal)).floor/(10.0**@decimal)
  207. else
  208. now_time = now_time.floor
  209. end
  210. return now_time

  211. #以下用于debug模式
  212. if now_time < 0
  213. p "Timer Wrong!! Clear...",now_time,\
  214. @perf_flag,@qpCounter,@tGetTime,
  215. @time_now.unpack('LL')[0],@time_now.unpack('LL')[1],
  216. @time_start.unpack('LL')[0],@time_start.unpack('LL')[1]
  217. self.clear()
  218. return 0.0
  219. else
  220. return now_time
  221. end
  222. end

  223. #-=====================-#
  224. # 获取时间比例因数
  225. #-=====================-#
  226. def scale()
  227. return @time_scale[0]+\
  228. @time_scale[1]*0xffffffff
  229. end

  230. #-=====================-#
  231. # 获取起始滴答数
  232. #-=====================-#
  233. def start()
  234. return @time_start.unpack('LL')[0]+\
  235. @time_start.unpack('LL')[1]*0xffffffff
  236. end

  237. #-=====================-#
  238. # 获取当前的嘀哒数
  239. #-=====================-#
  240. def timer()
  241. if @perf_flag
  242. @qpCounter.call(@time_now)
  243. else
  244. @time_now=[@tGetTime.call(),0].pack('LL')
  245. end
  246. return @time_now.unpack('LL')[0]+\
  247. @time_now.unpack('LL')[1]*0xffffffff
  248. end
  249. end
  250. #-------------------------------------#
  251. # 初始化自身成一个全局变量
  252. #-------------------------------------#
  253. $sys_timer=SystemTimer.new()
  254. #-------------------------------------#

  255. #==============================================================================
  256. # 仭 EasyConv module - Ver 0.90
  257. #------------------------------------------------------------------------------
  258. # Moonlight INN
  259. # http://cgi.members.interq.or.jp/aquarius/rasetsu/
  260. # RaTTiE
  261. # [email protected]
  262. #------------------------------------------------------------
  263. # EasyConv::s2u(text) : S-JIS -> UTF-8
  264. # EasyConv::u2s(text) : UTF-8 -> S-JIS
  265. #==============================================================================
  266. module EasyConv
  267. # API梡掕悢掕媊
  268. CP_ACP = 0
  269. CP_UTF8 = 65001

  270. #--------------------------------------------------------------------------
  271. # 仠 S-JIS -> UTF-8
  272. #--------------------------------------------------------------------------
  273. def s2u(text)
  274. # API掕媊
  275. m2w = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
  276. w2m = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')

  277. # S-JIS -> Unicode
  278. len = m2w.call(CP_ACP, 0, text, -1, nil, 0);
  279. buf = "\0" * (len*2)
  280. m2w.call(CP_ACP, 0, text, -1, buf, buf.size/2);

  281. # Unicode -> UTF-8
  282. len = w2m.call(CP_UTF8, 0, buf, -1, nil, 0, nil, nil);
  283. ret = "\0" * len
  284. w2m.call(CP_UTF8, 0, buf, -1, ret, ret.size, nil, nil);

  285. return ret
  286. end
  287. # module_function偲偟偰岞奐
  288. module_function :s2u
  289. #--------------------------------------------------------------------------
  290. # 仠 UTF-8 -> S-JIS
  291. #--------------------------------------------------------------------------
  292. def u2s(text)
  293. # API掕媊
  294. m2w = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
  295. w2m = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')

  296. # UTF-8 -> Unicode
  297. len = m2w.call(CP_UTF8, 0, text, -1, nil, 0);
  298. buf = "\0" * (len*2)
  299. m2w.call(CP_UTF8, 0, text, -1, buf, buf.size/2);

  300. # Unicode -> S-JIS
  301. len = w2m.call(CP_ACP, 0, buf, -1, nil, 0, nil, nil);
  302. ret = "\0" * len
  303. w2m.call(CP_ACP, 0, buf, -1, ret, ret.size, nil, nil);

  304. return ret
  305. end
  306. # module_function偲偟偰岞奐
  307. module_function :u2s
  308. end


  309. #==============================================================================
  310. # ■ Game_System
  311. #------------------------------------------------------------------------------
  312. #  处理系统附属数据的类。也可执行诸如 BGM 管理之类的功能。本类的实例请参考
  313. # $game_system 。
  314. #==============================================================================
  315. class Game_System
  316. #--------------------------------------------------------------------------
  317. # ● 定义实例变量
  318. #--------------------------------------------------------------------------
  319. attr_accessor :mtv_begin_time
  320. attr_accessor :mtv_now
  321. attr_accessor :mtv_length
  322. #--------------------------------------------------------------------------
  323. # ● 初始化对像
  324. #--------------------------------------------------------------------------
  325. alias mtv_gamesystem_initialize initialize
  326. def initialize
  327.   mtv_gamesystem_initialize
  328.   @mtv_begin_time = $sys_timer.now()
  329.   @mtv_now = false
  330.   @mtv_length = 0
  331. end
  332. end  

  333. #==============================================================================
  334. # ■ Scene_Map
  335. #------------------------------------------------------------------------------
  336. #  处理地图画面的类。
  337. #==============================================================================
  338. class Scene_Map
  339. #--------------------------------------------------------------------------
  340. # ● 刷新画面
  341. #--------------------------------------------------------------------------
  342. alias mtv_scenemap_update update
  343. def update
  344.   MTV.new_text
  345.   @mtv_window.refresh
  346.   mtv_scenemap_update
  347. end
  348. #--------------------------------------------------------------------------
  349. # ● 主处理
  350. #--------------------------------------------------------------------------
  351. alias mtv_scenemap_main main
  352. def main
  353.   @mtv_window = Window_MTV.new
  354.   mtv_scenemap_main
  355.   @mtv_window.dispose
  356. end
  357. #--------------------------------------------------------------------------
  358. # ● 调用战斗 (调整自动切换BGM)
  359. #--------------------------------------------------------------------------
  360. def call_battle
  361.   # 清除战斗调用标志
  362.   $game_temp.battle_calling = false
  363.   # 清除菜单调用标志
  364.   $game_temp.menu_calling = false
  365.   $game_temp.menu_beep = false
  366.   # 生成遇敌计数
  367.   $game_player.make_encounter_count
  368.   # 记忆地图 BGM 、停止 BGM
  369.   $game_temp.map_bgm = $game_system.playing_bgm
  370.   unless MTV.mtv?      
  371.     $game_system.bgm_play($game_system.battle_bgm)
  372.     # 演奏战斗开始 SE
  373.     $game_system.se_play($data_system.battle_start_se)
  374.   end
  375.   # 矫正主角姿势
  376.   $game_player.straighten
  377.   # 切换到战斗画面
  378.   $scene = Scene_Battle.new
  379. end
  380. end

  381. #==============================================================================
  382. # ■ Scene_Battle
  383. #------------------------------------------------------------------------------
  384. #  处理战斗的类。
  385. #==============================================================================


  386. #==============================================================================
  387. # ■ Window_MTV
  388. #------------------------------------------------------------------------------
  389. #  显示MTV字幕的窗口。
  390. #==============================================================================

  391. class Window_MTV < Window_Base
  392. #--------------------------------------------------------------------------
  393. # ● 初始化窗口
  394. #--------------------------------------------------------------------------
  395.   def initialize
  396.     super(0, 416, 640, 64)
  397.     self.contents = Bitmap.new(width - 32, height - 32)
  398.     $lrc_text = ""
  399.     self.z = 9999
  400.     #===========================
  401.     # 时间有限
  402.     @temp_text = ""
  403.     $game_temp.old_text = ""
  404.     # 面粉无敌
  405.     #===========================
  406.     refresh
  407.    
  408.   end
  409. #--------------------------------------------------------------------------
  410. # ● 刷新
  411. #--------------------------------------------------------------------------
  412.   def refresh(text = "")
  413.     #=================================================
  414.     # 时间有限
  415.     if $game_temp.in_battle
  416.       self.opacity = 120
  417.     else
  418.       self.opacity = 0
  419.     end
  420.     if $game_system.mtv_now == false or $lrc_text == ""
  421.       self.contents.clear
  422.       else
  423.     if $game_temp.refresh_times != 1
  424.       if $game_temp.old_text != @temp_text
  425.         self.contents.clear
  426.         self.contents.font.color = FONT_COLOR
  427.         self.contents.font.size = FONT_SIZE
  428.         self.contents.font.name = FONT_NAME
  429.         self.contents.draw_text(0, 0, 608, 32, $lrc_text, 1)   
  430.         self.contents.font.color = Color.new(255,255,255,255)
  431.         self.contents.draw_text(1, 1, 608, 32, $lrc_text, 1)
  432.         @temp_text = $lrc_text
  433.       end
  434.     else
  435.       self.contents.clear
  436.       self.contents.font.color = FONT_COLOR
  437.       self.contents.font.size = FONT_SIZE
  438.       self.contents.font.name = FONT_NAME
  439.       self.contents.draw_text(0, 0, 608, 32, $lrc_text, 1)   
  440.       self.contents.font.color = Color.new(255,255,255,255)
  441.       self.contents.draw_text(1, 1, 608, 32, $lrc_text, 1)
  442.       @temp_text = $lrc_text
  443.       end
  444.     end
  445.     # 面粉无敌
  446.     #==================================================
  447.   end
  448. end
复制代码
我是1.02版本的

我换成1.03的 有时还是会出现口

Lv1.梦旅人

梦石
0
星屑
47
在线时间
976 小时
注册时间
2011-4-30
帖子
860
2
发表于 2012-8-11 19:25:50 | 只看该作者
以前我也遇到过这个问题,原因不太清楚,最后只是rmxp1.03换成1.02就解决了。

点评

我试了 1.02 1.03 都有口  发表于 2012-8-11 21:40
回复 支持 反对

使用道具 举报

Lv1.梦旅人

六翼天使

梦石
0
星屑
50
在线时间
21 小时
注册时间
2006-7-1
帖子
111
3
发表于 2013-3-31 22:43:52 | 只看该作者
这个框是怎么解决的,求问

点评

请不要挖坟,这个大框的问题是因为捕捉到了\r \n这些换行符导致的,可自行排除~请勿再回帖~  发表于 2013-3-31 22:52
.png[/img][/url]
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
193 小时
注册时间
2013-3-24
帖子
448
4
发表于 2013-3-31 23:34:45 | 只看该作者
本帖最后由 joe5491 于 2013-3-31 23:39 编辑

在457行左右發現
RUBY 代码复制
  1. if $game_temp.refresh_times != 1
  2.       if $game_temp.old_text != @temp_text
  3.         self.contents.clear
  4.         self.contents.font.color = FONT_COLOR
  5.         self.contents.font.size = FONT_SIZE
  6.         self.contents.font.name = FONT_NAME
  7.         self.contents.draw_text(0, 0, 608, 32, $lrc_text, 1)   
  8.         self.contents.font.color = Color.new(255,255,255,255)
  9.         self.contents.draw_text(1, 1, 608, 32, $lrc_text, 1)
  10.         @temp_text = $lrc_text
  11.       end
  12.     else
  13.       self.contents.clear
  14.       self.contents.font.color = FONT_COLOR
  15.       self.contents.font.size = FONT_SIZE
  16.       self.contents.font.name = FONT_NAME
  17.       self.contents.draw_text(0, 0, 608, 32, $lrc_text, 1)   
  18.       self.contents.font.color = Color.new(255,255,255,255)
  19.       self.contents.draw_text(1, 1, 608, 32, $lrc_text, 1)
  20.       @temp_text = $lrc_text
  21.       end

改成:

RUBY 代码复制
  1. if $game_temp.refresh_times != 1
  2.       if $game_temp.old_text != @temp_text
  3.         self.contents.clear
  4.         self.contents.font.color = FONT_COLOR
  5.         self.contents.font.size = FONT_SIZE
  6.         self.contents.font.name = FONT_NAME
  7.         if $lrc_text == "\001" or $lrc_text == "\002" or $lrc_text == "\003" or $lrc_text == "\n"
  8.           $lrc_text = ""
  9.         else
  10.           self.contents.draw_text(0, 0, 608, 32, $lrc_text, 1)   
  11.           self.contents.font.color = Color.new(255,255,255,255)
  12.           self.contents.draw_text(1, 1, 608, 32, $lrc_text, 1)
  13.           @temp_text = $lrc_text
  14.         end
  15.       end
  16.     else
  17.       self.contents.clear
  18.       self.contents.font.color = FONT_COLOR
  19.       self.contents.font.size = FONT_SIZE
  20.       self.contents.font.name = FONT_NAME
  21.       if $lrc_text == "\001" or $lrc_text == "\002" or $lrc_text == "\003" or $lrc_text == "\n"
  22.         $lrc_text = ""
  23.       else
  24.         self.contents.draw_text(0, 0, 608, 32, $lrc_text, 1)   
  25.         self.contents.font.color = Color.new(255,255,255,255)
  26.         self.contents.draw_text(1, 1, 608, 32, $lrc_text, 1)
  27.         @temp_text = $lrc_text
  28.       end
  29.     end


因為RGSS102/103/104系列運行庫更換了更嚴謹的腳本執行方法,
所以之前一些很著名的腳本的原有設計問題會在新的運行庫中暴露而出。
這些BUG之前在RGSS100~101系列運行庫上沒有暴露,但是嚴重影響遊戲執行效率。
這樣就可以解決問題了,而不是迴避使用新版本的RPGXP。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
420 小时
注册时间
2011-3-13
帖子
251
5
 楼主| 发表于 2013-6-3 16:09:39 | 只看该作者
joe5491 发表于 2013-3-31 23:34
在457行左右發現
if $game_temp.refresh_times != 1
      if $game_temp.old_text != @temp_text

照你的样子改了,还是有口,怎么回事呢? 你要不检查下 重新发一个完整的脚本给我?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-27 01:56

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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