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

Project1

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

[已经过期] 用了地图式字幕脚本之后不能存档!

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2605
在线时间
896 小时
注册时间
2011-4-30
帖子
131

开拓者

跳转到指定楼层
1
发表于 2013-12-12 22:37:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
RUBY 代码复制
  1. #==============================================================================
  2. # ■ 地图式 可传递触发事件 字幕滚动 V1.0版  (By TERENCE龙皇)
  3. #------------------------------------------------------------------------------
  4. # 使用效果:
  5. # (1) 可以配合地图上的事件或某些特效处理
  6. # (2) 字幕滚动的效果永远会显示在最前面
  7. # (3) 字幕滚动中,能侦测到事件的传递,藉此触发可以处理一些事情与特效
  8. #
  9. # 如何使用:
  10. # (1) 字幕使用 UTF-8 格式的 TXT 档传写,请放在 Credit 文件夹之下
  11. # (2) TXT 档名,请使用英文,才不会导致不同语言作业系统上读取失败
  12. # (3) 其他部分,详见发布帖子,或研究范例工程
  13. #==============================================================================
  14.  
  15. CREDIT_DETECTE_Y = 240          # 触发侦测线
  16. CREDIT_NONEVISIBLE_HEIGHT = 53  # 字幕上下两侧不可视区域
  17.  
  18. #==============================================================================
  19. # ■ Game_System
  20. #------------------------------------------------------------------------------
  21. #  处理系统附属资料的类别。(扩增字幕)
  22. #  本类别的实例请参考 $game_system。
  23. #==============================================================================
  24. class Game_System
  25.   #--------------------------------------------------------------------------
  26.   # ● 定义实例变数
  27.   #--------------------------------------------------------------------------
  28.   attr_accessor :credit_obj               # 字幕物件暂存
  29.   attr_accessor :credit_working           # 字幕执行中的标志
  30.   attr_accessor :credit_filename          # 读取字幕的TXT档名
  31.   #--------------------------------------------------------------------------
  32.   # ● 初始化物件
  33.   #--------------------------------------------------------------------------
  34.   alias original_initialize initialize
  35.   def initialize
  36.     @credit_working = false
  37.     @credit_filename = ""
  38.     original_initialize
  39.   end
  40.   #--------------------------------------------------------------------------
  41.   # ● 字幕启用
  42.   #--------------------------------------------------------------------------
  43.   def credit_start(filename)
  44.     @credit_working = true
  45.     @credit_filename = "Audio/Credit/#{filename}.txt"
  46.   end
  47.   #--------------------------------------------------------------------------
  48.   # ● 字幕取消
  49.   #--------------------------------------------------------------------------
  50.   def credit_canceled
  51.     if @credit_working
  52.       @credit_obj.y = -(@credit_obj.bitmap_hieght)
  53.     end
  54.   end
  55.   #--------------------------------------------------------------------------
  56.   # ● 字幕讯息事件是否被传递
  57.   #--------------------------------------------------------------------------
  58.   def credit_mesgpost?
  59.     # 若启动字幕滚动
  60.     if @credit_working
  61.       # 侦测字幕滚动是否有事件被触发
  62.       if @credit_obj.message_flag
  63.         @credit_obj.message_flag = false
  64.         return true
  65.       else; return false; end
  66.     else; return false; end
  67.   end
  68. end
  69.  
  70. #==============================================================================
  71. # ■ Sprite_Credit
  72. #------------------------------------------------------------------------------
  73. #  显示字幕滚动用的活动区块。监视 $game_system 丶活动区块状态
  74. #  自动变化。
  75. #==============================================================================
  76. class Sprite_Credit < Sprite
  77.   #--------------------------------------------------------------------------
  78.   # ● 定义实例变数
  79.   #--------------------------------------------------------------------------
  80.   attr_accessor :message_flag               # 讯息标志
  81.   attr_accessor :bitmap_hieght              # 字幕高
  82.   #--------------------------------------------------------------------------
  83.   # ● 初始化物件
  84.   #--------------------------------------------------------------------------
  85.   def initialize(viewport)
  86.     super(viewport)
  87.     self.x = 0
  88.     self.y = 430
  89.     self.z = 0
  90.     @new_bitmap_flag = false
  91.     @line_counts = 0
  92.     @bitmap_hieght = 0
  93.     @message_line = []
  94.     @message_flag = false
  95.     update
  96.   end
  97.   #--------------------------------------------------------------------------
  98.   # ● 字幕 Bitmap 初始建立
  99.   #--------------------------------------------------------------------------
  100.   def create(filename)
  101.     unless FileTest.exist?(filename)
  102.       $game_system.credit_working = false
  103.       @new_bitmap_flag = false
  104.       @line_counts = 0
  105.       return
  106.     end
  107.     @bitmap_hieght = File.read(filename).count("\n")
  108.     @bitmap_hieght = 32*(1+@bitmap_hieght)
  109.     self.bitmap = Bitmap.new(640, @bitmap_hieght)
  110.     File.open(filename) do |file|
  111.       while line = file.gets
  112.         dump_lines(line)
  113.       end
  114.     end
  115.   end
  116.   #--------------------------------------------------------------------------
  117.   # ● TXT 文件 行处理
  118.   #--------------------------------------------------------------------------
  119.   def dump_lines(line)
  120.     yy = 32*@line_counts
  121.     if (line.gsub!(/\<PostMessage\>/){""})!=nil
  122.       @message_line.push(yy+self.y)
  123.     end
  124.     if @line_counts == 0
  125.       self.bitmap.draw_text(0, yy, 640, 32, line[3, line.size], 1)
  126.     else
  127.       self.bitmap.draw_text(0, yy, 640, 32, line, 1)
  128.     end
  129.     @line_counts += 1
  130.   end
  131.   #--------------------------------------------------------------------------
  132.   # ● 释放
  133.   #--------------------------------------------------------------------------
  134.   def dispose
  135.     if self.bitmap != nil
  136.       self.bitmap.dispose
  137.     end
  138.     super
  139.   end
  140.   #--------------------------------------------------------------------------
  141.   # ● 更新画面
  142.   #--------------------------------------------------------------------------
  143.   def update
  144.     super
  145.     # 设定计时器执行中为可见
  146.     self.visible = $game_system.credit_working
  147.     # 若启动字幕滚动
  148.     if $game_system.credit_working
  149.       unless @new_bitmap_flag
  150.         @new_bitmap_flag = true
  151.         create($game_system.credit_filename)
  152.       end
  153.       scroll_update
  154.       message_detected
  155.     end
  156.   end
  157.   #--------------------------------------------------------------------------
  158.   # ● 字幕滚动
  159.   #--------------------------------------------------------------------------
  160.   def scroll_update
  161.     if scroll_end?
  162.       $game_system.credit_working = false
  163.       @new_bitmap_flag = false
  164.       @message_flag = false
  165.       @message_line.clear
  166.       @line_counts = 0
  167.       self.y = 430
  168.       if self.bitmap != nil
  169.         self.bitmap.dispose
  170.       end
  171.     else
  172.       self.y -= 1
  173.     end
  174.   end
  175.   #--------------------------------------------------------------------------
  176.   # ● 字幕滚动结束 ?
  177.   #--------------------------------------------------------------------------
  178.   def scroll_end?
  179.     if self.y <= -(@bitmap_hieght)
  180.       return true
  181.     else
  182.       return false
  183.     end
  184.   end
  185.   #--------------------------------------------------------------------------
  186.   # ● 事件讯息祯测
  187.   #--------------------------------------------------------------------------
  188.   def message_detected
  189.     for i in [email]0...@message_line.size[/email]
  190.       if @message_line[i] == nil; break; end
  191.       @message_line[i] -= 1
  192.       if @message_line[i] <= CREDIT_DETECTE_Y-32 # 触发侦测线
  193.         @message_line.delete_at(i)
  194.         @message_flag = true
  195.       end
  196.     end
  197.   end
  198. end
  199.  
  200. #==============================================================================
  201. # ■ Spriteset_Map
  202. #------------------------------------------------------------------------------
  203. #  处理地图画面活动区块和元件的类别。 (扩增字幕)
  204. #  本类别在 Scene_Map 类别的内部使用。
  205. #==============================================================================
  206. class Spriteset_Map
  207.   #--------------------------------------------------------------------------
  208.   # ● 初始化物件
  209.   #--------------------------------------------------------------------------
  210.   alias original_initialize initialize
  211.   def initialize
  212.     # 字幕尚未启动才 生成
  213.     unless $game_system.credit_working
  214.       hh = CREDIT_NONEVISIBLE_HEIGHT
  215.       credit_viewport = Viewport.new(0,hh,640,480-hh*2)
  216.       credit_viewport.z = 5000 + 200
  217.       $game_system.credit_obj = Sprite_Credit.new(credit_viewport)
  218.     end
  219.     original_initialize
  220.   end
  221.   #--------------------------------------------------------------------------
  222.   # ● 释放
  223.   #--------------------------------------------------------------------------
  224.   alias original_dispose dispose
  225.   def dispose
  226.     # 场景非地图 字幕滚动区块可视关闭
  227.     unless $scene.is_a?(Scene_Map)
  228.       $game_system.credit_obj.visible = false
  229.     end
  230.     # 字幕尚未启动才 释放字幕滚动区块
  231.     unless $game_system.credit_working
  232.       # 释放显示连接埠
  233.       $game_system.credit_obj.viewport.dispose
  234.       $game_system.credit_obj.dispose
  235.     end
  236.     original_dispose
  237.   end
  238.   #--------------------------------------------------------------------------
  239.   # ● 更新画面
  240.   #--------------------------------------------------------------------------
  241.   alias original_update update
  242.   def update
  243.     # 更新字幕滚动区块
  244.     $game_system.credit_obj.update
  245.     # 更新显示连接埠
  246.     $game_system.credit_obj.viewport.update
  247.     original_update
  248.   end
  249. end

会提示no marshal_dump is defined for class Sprite_Credit

Lv1.梦旅人

路人党员

梦石
0
星屑
52
在线时间
2276 小时
注册时间
2010-12-30
帖子
3225
2
发表于 2013-12-12 23:54:35 | 只看该作者
本帖最后由 英顺的马甲 于 2013-12-12 23:56 编辑
  1. class Game_System
  2.   def _dump(*args)
  3.     self.credit_obj = nil
  4.     return Marshal.dump(self)
  5.   end
  6.   def self._load(str)
  7.     s = Marshal.load(self)
  8.     self.credit_obj = Sprite_Credit.new
  9.     return s
  10.   end
  11. end
复制代码
此脚本未经测试,是否有效有待验证==
本人擅长XP,如果有脚本或者Ruby方面的问题欢迎发电邮到[email protected]咨询,本人很少检查电邮所以不一定会及时回复,本人不会直接出手解决问题只会提供一个方向,所以谢绝伸手党
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2605
在线时间
896 小时
注册时间
2011-4-30
帖子
131

开拓者

3
 楼主| 发表于 2013-12-13 12:16:35 | 只看该作者
英顺的马甲 发表于 2013-12-12 23:54
此脚本未经测试,是否有效有待验证==

return Marshal.dump(self)显示stack level too deep

点评

我这里每次都这样!  发表于 2013-12-14 10:09
咋可能啊,我毫无压力地存档了=w=  发表于 2013-12-14 00:23
回复 支持 反对

使用道具 举报

Lv1.梦旅人

路人党员

梦石
0
星屑
52
在线时间
2276 小时
注册时间
2010-12-30
帖子
3225
4
发表于 2013-12-13 13:19:20 | 只看该作者
本帖最后由 英顺的马甲 于 2013-12-13 13:22 编辑
mariofans 发表于 2013-12-13 12:16
return Marshal.dump(self)显示stack level too deep


那就换一个好了==
  1. class Sprite_Credit
  2.   def _dump(*args)
  3.     return Marshal.dump([@message_flag,@bitmap_hieght ])
  4.   end
  5.   def self._load(str)
  6.     sc = self.new
  7.     sc.message_flag,sc.bitmap_hieght = *Marshal.load(str)
  8.     return sc
  9.   end
  10. end
复制代码

点评

no marshal_dump is defined for class Viewport……  发表于 2013-12-13 13:46
本人擅长XP,如果有脚本或者Ruby方面的问题欢迎发电邮到[email protected]咨询,本人很少检查电邮所以不一定会及时回复,本人不会直接出手解决问题只会提供一个方向,所以谢绝伸手党
回复 支持 反对

使用道具 举报

Lv1.梦旅人

路人党员

梦石
0
星屑
52
在线时间
2276 小时
注册时间
2010-12-30
帖子
3225
5
发表于 2013-12-13 16:56:06 | 只看该作者
mariofans 发表于 2013-12-13 12:16
return Marshal.dump(self)显示stack level too deep
  1. class Scene_Save
  2.   alias orig_wsd write_save_data unless defined?(orig_wsd)
  3.   def write_save_data(file)
  4.     $game_system.credit_obj = nil
  5.     orig_wsd(file)
  6.   end
  7. end
  8. class Scene_Load
  9.   alias orig_rsd read_save_data unless defined?(orig_rsd)
  10.   def read_save_data(file)
  11.     orig_rsd(file)
  12.     $game_system.credit_obj = Sprite_Credit.new
  13.   end
  14. end
复制代码

点评

no marshal_dump is defined for class Sprite_Credit………………你还是直接改脚本吧……  发表于 2013-12-13 18:22
本人擅长XP,如果有脚本或者Ruby方面的问题欢迎发电邮到[email protected]咨询,本人很少检查电邮所以不一定会及时回复,本人不会直接出手解决问题只会提供一个方向,所以谢绝伸手党
回复 支持 反对

使用道具 举报

Lv3.寻梦者

○赛

梦石
0
星屑
1249
在线时间
1276 小时
注册时间
2013-1-22
帖子
2246

贵宾

6
发表于 2013-12-15 19:23:01 | 只看该作者
你用了其他脚本么?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-30 06:30

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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