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

Project1

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

[已经解决] 关于地图滚动字幕存档报错的问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
62 小时
注册时间
2011-10-2
帖子
25
跳转到指定楼层
1
发表于 2015-4-21 00:10:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
做游戏前言的时候用了
https://rpg.blue/forum.php?mod=viewthread&tid=231119
大神的脚本
后来存档就报错
no marshal_dump is defined for class Sprite_Credit
代码如下:
  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. CREDIT_DETECTE_Y = 240          # 触发侦测线
  15. CREDIT_NONEVISIBLE_HEIGHT = 25  # 字幕上下两侧不可视区域

  16. #==============================================================================
  17. # ■ Game_System
  18. #------------------------------------------------------------------------------
  19. #  处理系统附属资料的类别。(扩增字幕)
  20. #  本类别的实例请参考 $game_system。
  21. #==============================================================================
  22. class Game_System
  23.   #--------------------------------------------------------------------------
  24.   # ● 定义实例变数
  25.   #--------------------------------------------------------------------------
  26.   attr_accessor :credit_obj               # 字幕物件暂存
  27.   attr_accessor :credit_working           # 字幕执行中的标志
  28.   attr_accessor :credit_filename          # 读取字幕的TXT档名
  29.   #--------------------------------------------------------------------------
  30.   # ● 初始化物件
  31.   #--------------------------------------------------------------------------
  32.   alias original_initialize initialize
  33.   def initialize
  34.     @credit_working = false
  35.     @credit_filename = ""
  36.     original_initialize
  37.   end
  38.   #--------------------------------------------------------------------------
  39.   # ● 字幕启用
  40.   #--------------------------------------------------------------------------
  41.   def credit_start(filename)
  42.     @credit_working = true
  43.     @credit_filename = "Credit/#{filename}.txt"
  44.   end
  45.   #--------------------------------------------------------------------------
  46.   # ● 字幕取消
  47.   #--------------------------------------------------------------------------
  48.   def credit_canceled
  49.     if @credit_working
  50.       @credit_obj.y = -(@credit_obj.bitmap_hieght)
  51.     end
  52.   end
  53.   #--------------------------------------------------------------------------
  54.   # ● 字幕讯息事件是否被传递
  55.   #--------------------------------------------------------------------------
  56.   def credit_mesgpost?
  57.     # 若启动字幕滚动
  58.     if @credit_working
  59.       # 侦测字幕滚动是否有事件被触发
  60.       if @credit_obj.message_flag
  61.         @credit_obj.message_flag = false
  62.         return true
  63.       else; return false; end
  64.     else; return false; end
  65.   end
  66. end

  67. #==============================================================================
  68. # ■ Sprite_Credit
  69. #------------------------------------------------------------------------------
  70. #  显示字幕滚动用的活动区块。监视 $game_system 丶活动区块状态
  71. #  自动变化。
  72. #==============================================================================
  73. class Sprite_Credit < Sprite
  74.   #--------------------------------------------------------------------------
  75.   # ● 定义实例变数
  76.   #--------------------------------------------------------------------------
  77.   attr_accessor :message_flag               # 讯息标志
  78.   attr_accessor :bitmap_hieght              # 字幕高
  79.   #--------------------------------------------------------------------------
  80.   # ● 初始化物件
  81.   #--------------------------------------------------------------------------
  82.   def initialize(viewport)
  83.     super(viewport)
  84.     self.x = 0
  85.     self.y = 430
  86.     self.z = 0
  87.     @new_bitmap_flag = false
  88.     @line_counts = 0
  89.     @bitmap_hieght = 0
  90.     @message_line = []
  91.     @message_flag = false
  92.     update
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ● 字幕 Bitmap 初始建立
  96.   #--------------------------------------------------------------------------
  97.   def create(filename)
  98.     unless FileTest.exist?(filename)
  99.       $game_system.credit_working = false
  100.       @new_bitmap_flag = false
  101.       @line_counts = 0
  102.       return
  103.     end
  104.     @bitmap_hieght = File.read(filename).count("\n")
  105.     @bitmap_hieght = 32*(1+@bitmap_hieght)
  106.     self.bitmap = Bitmap.new(640, @bitmap_hieght)
  107.     File.open(filename) do |file|
  108.       while line = file.gets
  109.         dump_lines(line)
  110.       end
  111.     end
  112.   end
  113.   #--------------------------------------------------------------------------
  114.   # ● TXT 文件 行处理
  115.   #--------------------------------------------------------------------------
  116.   def dump_lines(line)
  117.     yy = 32*@line_counts
  118.     if (line.gsub!(/\<PostMessage\>/){""})!=nil
  119.       @message_line.push(yy+self.y)
  120.     end
  121.     if @line_counts == 0
  122.       self.bitmap.draw_text(0, yy, 640, 32, line[3, line.size], 1)
  123.     else
  124.       self.bitmap.draw_text(0, yy, 640, 32, line, 1)
  125.     end
  126.     @line_counts += 1
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # ● 释放
  130.   #--------------------------------------------------------------------------
  131.   def dispose
  132.     if self.bitmap != nil
  133.       self.bitmap.dispose
  134.     end
  135.     super
  136.   end
  137.   #--------------------------------------------------------------------------
  138.   # ● 更新画面
  139.   #--------------------------------------------------------------------------
  140.   def update
  141.     super
  142.     # 设定计时器执行中为可见
  143.     self.visible = $game_system.credit_working
  144.     # 若启动字幕滚动
  145.     if $game_system.credit_working
  146.       unless @new_bitmap_flag
  147.         @new_bitmap_flag = true
  148.         create($game_system.credit_filename)
  149.       end
  150.       scroll_update
  151.       message_detected
  152.     end
  153.   end
  154.   #--------------------------------------------------------------------------
  155.   # ● 字幕滚动
  156.   #--------------------------------------------------------------------------
  157.   def scroll_update
  158.     if scroll_end?
  159.       $game_system.credit_working = false
  160.       @new_bitmap_flag = false
  161.       @message_flag = false
  162.       @message_line.clear
  163.       @line_counts = 0
  164.       self.y = 430
  165.       if self.bitmap != nil
  166.         self.bitmap.dispose
  167.       end
  168.     else
  169.       self.y -= 1
  170.     end
  171.   end
  172.   #--------------------------------------------------------------------------
  173.   # ● 字幕滚动结束 ?
  174.   #--------------------------------------------------------------------------
  175.   def scroll_end?
  176.     if self.y <= -(@bitmap_hieght)
  177.       return true
  178.     else
  179.       return false
  180.     end
  181.   end
  182.   #--------------------------------------------------------------------------
  183.   # ● 事件讯息祯测
  184.   #--------------------------------------------------------------------------
  185.   def message_detected
  186.     for i in 0...@message_line.size
  187.       if @message_line[i] == nil; break; end
  188.       @message_line[i] -= 1
  189.       if @message_line[i] <= CREDIT_DETECTE_Y-32 # 触发侦测线
  190.         @message_line.delete_at(i)
  191.         @message_flag = true
  192.       end
  193.     end
  194.   end
  195. end

  196. #==============================================================================
  197. # ■ Spriteset_Map
  198. #------------------------------------------------------------------------------
  199. #  处理地图画面活动区块和元件的类别。 (扩增字幕)
  200. #  本类别在 Scene_Map 类别的内部使用。
  201. #==============================================================================
  202. class Spriteset_Map
  203.   #--------------------------------------------------------------------------
  204.   # ● 初始化物件
  205.   #--------------------------------------------------------------------------
  206.   alias original_initialize initialize
  207.   def initialize
  208.     # 字幕尚未启动才 生成
  209.     unless $game_system.credit_working
  210.       hh = CREDIT_NONEVISIBLE_HEIGHT
  211.       credit_viewport = Viewport.new(0,hh,640,480-hh*2)
  212.       credit_viewport.z = 5000 + 200
  213.       $game_system.credit_obj = Sprite_Credit.new(credit_viewport)
  214.     end
  215.     original_initialize
  216.   end
  217.   #--------------------------------------------------------------------------
  218.   # ● 释放
  219.   #--------------------------------------------------------------------------
  220.   alias original_dispose dispose
  221.   def dispose
  222.     # 场景非地图 字幕滚动区块可视关闭
  223.     unless $scene.is_a?(Scene_Map)
  224.       $game_system.credit_obj.visible = false
  225.     end
  226.     # 字幕尚未启动才 释放字幕滚动区块
  227.     unless $game_system.credit_working
  228.       # 释放显示连接埠
  229.       $game_system.credit_obj.viewport.dispose
  230.       $game_system.credit_obj.dispose
  231.     end
  232.     original_dispose
  233.   end
  234.   #--------------------------------------------------------------------------
  235.   # ● 更新画面
  236.   #--------------------------------------------------------------------------
  237.   alias original_update update
  238.   def update
  239.     # 更新字幕滚动区块
  240.     $game_system.credit_obj.update
  241.     # 更新显示连接埠
  242.     $game_system.credit_obj.viewport.update
  243.     original_update
  244.   end
  245. end
复制代码
求大家帮帮忙

Lv3.寻梦者

梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
帖子
1516
2
发表于 2015-4-21 17:05:53 | 只看该作者
不知道怎么处理所以就直接把这个东西从 $game_system里分出来了。方法:额,$zimu.credit_start()等
  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. CREDIT_DETECTE_Y = 240          # 触发侦测线
  15. CREDIT_NONEVISIBLE_HEIGHT = 25  # 字幕上下两侧不可视区域

  16. #==============================================================================
  17. # ■ Game_System
  18. #------------------------------------------------------------------------------
  19. #  处理系统附属资料的类别。(扩增字幕)
  20. #  本类别的实例请参考 。
  21. #==============================================================================
  22. class Zimu
  23.   #--------------------------------------------------------------------------
  24.   # ● 定义实例变数
  25.   #--------------------------------------------------------------------------
  26.   attr_accessor :credit_obj               # 字幕物件暂存
  27.   attr_accessor :credit_working           # 字幕执行中的标志
  28.   attr_accessor :credit_filename          # 读取字幕的TXT档名
  29.   #--------------------------------------------------------------------------
  30.   # ● 初始化物件
  31.   #--------------------------------------------------------------------------

  32.   def initialize
  33.     @credit_working = false
  34.     @credit_filename = ""
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ● 字幕启用
  38.   #--------------------------------------------------------------------------
  39.   def credit_start(filename)
  40.     @credit_working = true
  41.     @credit_filename = "Credit/#{filename}.txt"
  42.   end
  43.   #--------------------------------------------------------------------------
  44.   # ● 字幕取消
  45.   #--------------------------------------------------------------------------
  46.   def credit_canceled
  47.     if @credit_working
  48.       @credit_obj.y = -(@credit_obj.bitmap_hieght)
  49.     end
  50.   end
  51.   #--------------------------------------------------------------------------
  52.   # ● 字幕讯息事件是否被传递
  53.   #--------------------------------------------------------------------------
  54.   def credit_mesgpost?
  55.     # 若启动字幕滚动
  56.     if @credit_working
  57.       # 侦测字幕滚动是否有事件被触发
  58.       if @credit_obj.message_flag
  59.         @credit_obj.message_flag = false
  60.         return true
  61.       else; return false; end
  62.     else; return false; end
  63.   end
  64. end


  65. #==============================================================================
  66. # ■ Sprite_Credit
  67. #------------------------------------------------------------------------------
  68. #  显示字幕滚动用的活动区块。监视 $game_system 丶活动区块状态
  69. #  自动变化。
  70. #==============================================================================
  71. class Sprite_Credit < Sprite
  72.   #--------------------------------------------------------------------------
  73.   # ● 定义实例变数
  74.   #--------------------------------------------------------------------------
  75.   attr_accessor :message_flag               # 讯息标志
  76.   attr_accessor :bitmap_hieght              # 字幕高
  77.   #--------------------------------------------------------------------------
  78.   # ● 初始化物件
  79.   #--------------------------------------------------------------------------
  80.   def initialize(viewport)
  81.     super(viewport)
  82.     self.x = 0
  83.     self.y = 430
  84.     self.z = 0
  85.     @new_bitmap_flag = false
  86.     @line_counts = 0
  87.     @bitmap_hieght = 0
  88.     @message_line = []
  89.     @message_flag = false
  90.     update
  91.   end
  92.   #--------------------------------------------------------------------------
  93.   # ● 字幕 Bitmap 初始建立
  94.   #--------------------------------------------------------------------------
  95.   def create(filename)
  96.     unless FileTest.exist?(filename)
  97.       $zimu.credit_working = false
  98.       @new_bitmap_flag = false
  99.       @line_counts = 0
  100.       return
  101.     end
  102.     @bitmap_hieght = File.read(filename).count("\n")
  103.     @bitmap_hieght = 32*(1+@bitmap_hieght)
  104.     self.bitmap = Bitmap.new(640, @bitmap_hieght)
  105.     File.open(filename) do |file|
  106.       while line = file.gets
  107.         dump_lines(line)
  108.       end
  109.     end
  110.   end
  111.   #--------------------------------------------------------------------------
  112.   # ● TXT 文件 行处理
  113.   #--------------------------------------------------------------------------
  114.   def dump_lines(line)
  115.     yy = 32*@line_counts
  116.     if (line.gsub!(/\<PostMessage\>/){""})!=nil
  117.       @message_line.push(yy+self.y)
  118.     end
  119.     if @line_counts == 0
  120.       self.bitmap.draw_text(0, yy, 640, 32, line[3, line.size], 1)
  121.     else
  122.       self.bitmap.draw_text(0, yy, 640, 32, line, 1)
  123.     end
  124.     @line_counts += 1
  125.   end
  126.   #--------------------------------------------------------------------------
  127.   # ● 释放
  128.   #--------------------------------------------------------------------------
  129.   def dispose
  130.     if self.bitmap != nil
  131.       self.bitmap.dispose
  132.     end
  133.     super
  134.   end
  135.   #--------------------------------------------------------------------------
  136.   # ● 更新画面
  137.   #--------------------------------------------------------------------------
  138.   def update
  139.     super
  140.     # 设定计时器执行中为可见
  141.     self.visible = $zimu.credit_working
  142.     # 若启动字幕滚动
  143.     if $zimu.credit_working
  144.       unless @new_bitmap_flag
  145.         @new_bitmap_flag = true
  146.         create($zimu.credit_filename)
  147.       end
  148.       scroll_update
  149.       message_detected
  150.     end
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ● 字幕滚动
  154.   #--------------------------------------------------------------------------
  155.   def scroll_update
  156.     if scroll_end?
  157.       $zimu.credit_working = false
  158.       @new_bitmap_flag = false
  159.       @message_flag = false
  160.       @message_line.clear
  161.       @line_counts = 0
  162.       self.y = 430
  163.       if self.bitmap != nil
  164.         self.bitmap.dispose
  165.       end
  166.     else
  167.       self.y -= 1
  168.     end
  169.   end
  170.   #--------------------------------------------------------------------------
  171.   # ● 字幕滚动结束 ?
  172.   #--------------------------------------------------------------------------
  173.   def scroll_end?
  174.     if self.y <= -(@bitmap_hieght)
  175.       return true
  176.     else
  177.       return false
  178.     end
  179.   end
  180.   #--------------------------------------------------------------------------
  181.   # ● 事件讯息祯测
  182.   #--------------------------------------------------------------------------
  183.   def message_detected
  184.     for i in 0...@message_line.size
  185.       if @message_line[i] == nil; break; end
  186.       @message_line[i] -= 1
  187.       if @message_line[i] <= CREDIT_DETECTE_Y-32 # 触发侦测线
  188.         @message_line.delete_at(i)
  189.         @message_flag = true
  190.       end
  191.     end
  192.   end
  193. end

  194. #==============================================================================
  195. # ■ Spriteset_Map
  196. #------------------------------------------------------------------------------
  197. #  处理地图画面活动区块和元件的类别。 (扩增字幕)
  198. #  本类别在 Scene_Map 类别的内部使用。
  199. #==============================================================================
  200. class Spriteset_Map
  201.   #--------------------------------------------------------------------------
  202.   # ● 初始化物件
  203.   #--------------------------------------------------------------------------
  204.   alias original_initialize initialize
  205.   def initialize
  206.     # 字幕尚未启动才 生成
  207.     unless $zimu.credit_working
  208.       hh = CREDIT_NONEVISIBLE_HEIGHT
  209.       credit_viewport = Viewport.new(0,hh,640,480-hh*2)
  210.       credit_viewport.z = 5000 + 200
  211.       $zimu.credit_obj = Sprite_Credit.new(credit_viewport)
  212.     end
  213.     original_initialize
  214.   end
  215.   #--------------------------------------------------------------------------
  216.   # ● 释放
  217.   #--------------------------------------------------------------------------
  218.   alias original_dispose dispose
  219.   def dispose
  220.     # 场景非地图 字幕滚动区块可视关闭
  221.     unless $scene.is_a?(Scene_Map)
  222.       $zimu.credit_obj.visible = false
  223.     end
  224.     # 字幕尚未启动才 释放字幕滚动区块
  225.     unless $zimu.credit_working
  226.       # 释放显示连接埠
  227.       $zimu.credit_obj.viewport.dispose
  228.       $zimu.credit_obj.dispose
  229.     end
  230.     original_dispose
  231.   end
  232.   #--------------------------------------------------------------------------
  233.   # ● 更新画面
  234.   #--------------------------------------------------------------------------
  235.   alias original_update update
  236.   def update
  237.     # 更新字幕滚动区块
  238.     $zimu.credit_obj.update
  239.     # 更新显示连接埠
  240.     $zimu.credit_obj.viewport.update
  241.     original_update
  242.   end
  243. end



  244. $zimu= Zimu.new
复制代码

点评

虽然我已经把字幕做成图片用图片移动做成一样的效果了orz还是谢谢你了  发表于 2015-4-26 01:21

评分

参与人数 1星屑 +90 收起 理由
RyanBern + 90 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-22 21:03

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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