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

Project1

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

关于回忆系统如何去掉多余的空行问题

 关闭 [复制链接]

Lv1.梦旅人

最BT美攻!

梦石
0
星屑
50
在线时间
3 小时
注册时间
2007-3-7
帖子
1407
跳转到指定楼层
1
发表于 2009-1-27 10:24:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
AVG回忆系统有点小BUG
游戏时间越长
回忆系统越会慢半拍
初步认为
是把游戏里用CTRL+N编辑后会产生的空行也加到回忆系统里了
但回忆系统的行数却没有把空行算在里面?
所以越来越慢半拍??



俺想问的就是如何把回忆系统里空白行去掉?
让他正常显示不会慢一拍



回忆系统是Benavii大写的
以下是回忆系统脚本和做法

1、在Game_System22行以下加入
attr_accessor :backlog                  # 回想模式
attr_accessor :backlog_line            # 回想行数
attr_accessor :save_backlog            # 回想提示对话
然后在Game_System39行以下加入
  @backlog = []
  @backlog_line = 0
@save_backlog = ""
初始化两个对象。@backlog是数组,@backlog_line是行数。
2、在Window_Message78行text = $game_temp.message_text以下加入
    backlog = text.clone
      $backlog_line = backlog.split(/\n/).size
      $game_system.backlog_line += backlog.split(/\n/).size #数数要显示的文字里有多少个分行符号,有一个符号就有一行,然后把它加到总行数里面
      $game_system.backlog.push(backlog)    把对话内容push到backlog中

新建的窗口脚本
#Window_Backlog

class Window_Backlog < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 初始化目标
  #--------------------------------------------------------------------------
  def initialize
    super(0, 48, 640, 384)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.active = false
    self.back_opacity = 160
    self.z = 99999
    self.cursor_rect.empty #BB:这里重写了一下,光标取消掉了
    self.index = $game_system.backlog_line - 1
    refresh
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
   
    x = y = 0
    @item_max = $game_system.backlog_line
    if @item_max <= 0
      return
    end
    self.contents = Bitmap.new(width - 32, row_max * 32)
    self.contents.font.color = normal_color
    for i in 0...$game_system.backlog.size
    text = $game_system.backlog.clone
      begin
        last_text = text.clone
        text.gsub!(/\\[Vv]\[([0-9]+)\]/) { "#{$game_variables[$1.to_s]}" }
      end until text == last_text
      text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
        $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
      end
   
      # 为了方便、将 "\\\\" 变换为 "\000"
      text.gsub!(/\\\\/) { "\000" }
      # "\\C" 变为 "\001" に、"\\G" 变为 "\002"
      text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
      text.gsub!(/\\[Gg]/) { "" }
      text.gsub!(/\\ani\[([0-9]+)\]/) { "" }
      #AVG如果你要用到对话脚本里其它功能~要记的在回忆系统里加一下
      
    text.gsub!(/\\[Ss]\[([0-9]+)\]/) { "" }
    text.gsub!(/\\[Aa]\[(.*?)\]/) { "" }
    text.gsub!(/\\[.]/) { "" }
    text.gsub!(/\\[|]/) { "" }
    text.gsub!(/\\[Mm]\[([0-9]+)\]/) { "" }
   
    text.gsub!(/\\[>]/) { "" }
    text.gsub!(/\\[<]/) { "" }
    text.gsub!(/\\[!]/) { "" }
    text.gsub!(/\\[~]/) { "" }
   
    text.gsub!(/\\[Ii]/) { "" }
    text.gsub!(/\\[Oo]\[([0-9]+)\]/) { "" }
    text.gsub!(/\\[Hh]\[([0-9]+)\]/) { "" }
    text.gsub!(/\\[Bb]\[([0-9]+)\]/) { "" }
    text.gsub!(/\\[Kk]\[(.*?)\]/) { "" }
      # c 获取 1 个字 (如果不能取得文字就循环)
      while ((c = text.slice!(/./m)) != nil)
        # \\ 的情况下
        if c == "\000"
          # 还原为本来的文字
          c = "\\"
        end
        # \C[n] 的情况下
        if c == "\001"
          # 更改文字色
          text.sub!(/\[([0-9]+)\]/, "")
          color = $1.to_i
          if color >= 0 and color <= 7
            self.contents.font.color = text_color(color)
          end
          # 下面的文字
          next
        end
        # 另起一行文字的情况下
        if c == "\n"
          # 刷新选择项及光标的高
          if y >= $game_temp.choice_start
            @cursor_width = [@cursor_width, x].max
          end
          # y 加 1
          y += 1
          x = 0
          # 移动到选择项的下一行
          if y >= $game_temp.choice_start
            x = 8
          end
          # 下面的文字
          next
        end
        # 描绘文字
        self.contents.draw_text(100 + x, 32 * y, 40, 32, c)
        # x 为要描绘文字的加法运算
        x += self.contents.text_size(c).width
      end
    end
    self.top_row = (self.row_max - 1) - (self.page_row_max - 1)
  end
end


#Scene_Backlog

class Scene_Backlog
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    # 获取角色
    # 生成状态窗口
    @backlog_window = Window_Backlog.new
    @backlog_window.cursor_rect.empty
    @spriteset = Spriteset_Map.new
    #AVG
    @Hbg = Sprite.new
      @Hbg.bitmap = Bitmap.new("Graphics/Pictures/回忆框")
      @Hbg.opacity = 200
      @Hbg.visible = true
      @Hbg.x = 0
      @Hbg.y = 0
      @Hbg.z = 3000
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update
      # 如果画面被切换的话就中断循环
      if $scene != self
        break
      end
    end
    # 准备过渡
    Graphics.freeze
    # 释放窗口
    @backlog_window.dispose
    @spriteset.dispose
    @Hbg.dispose
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 切换到菜单画面
      @Hbg.visible = false
      $scene = Scene_Map.new
      return
    end
    #BB:取消了Backlog窗口的刷新,改成按一下键翻动一下窗口。
    if Input.repeat?(Input::UP)
      # 切换到菜单画面
      @backlog_window.top_row -= 1 unless @backlog_window.top_row == 0
      return
    end
    if Input.repeat?(Input::DOWN)
      # 切换到菜单画面
      @backlog_window.top_row += 1 unless @backlog_window.top_row == @backlog_window.row_max - @backlog_window.page_row_max  
      return
    end   
    if Input.repeat?(Input::L)
      # 切换到菜单画面
      @backlog_window.top_row -= @backlog_window.page_row_max
      return
    end   
    if Input.repeat?(Input::R)
      # 切换到菜单画面
      @backlog_window.top_row += [@backlog_window.page_row_max, @backlog_window.row_max - (@backlog_window.page_row_max + @backlog_window.top_row)].min
    end   
  end
end
   

要看系统的话就是主站俺那个AVG系统整合了
http://rpg.blue/upload_program/files/AVG精装版1.05.rar


炒饭的游戏用的根本就是俺的原系统
没有改正这个BUG。。。OTL
只好来这提问了
谢谢各位高人们帮俺看看吧
版务信息:本贴由楼主自主结贴~
骑士の圣堂最终版华丽丽登场~~

http://rpg.blue/viewthread.php?tid=116851
AVG原创自制游戏  
神の大陆出品
神之大陆游戏制作小组唯美为主BT为终(偏BL向)
欢迎来搅合BLOG:http://hi.baidu.com/tranpol
官网:http://tierradesagrado.uueasy.com/
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-10-19
帖子
271
2
发表于 2009-1-27 14:02:57 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

最BT美攻!

梦石
0
星屑
50
在线时间
3 小时
注册时间
2007-3-7
帖子
1407
3
 楼主| 发表于 2009-1-28 08:33:41 | 只看该作者
...我明天发布游戏和AVG1.06系统
。。。。但愿来的及啊
骑士の圣堂最终版华丽丽登场~~

http://rpg.blue/viewthread.php?tid=116851
AVG原创自制游戏  
神の大陆出品
神之大陆游戏制作小组唯美为主BT为终(偏BL向)
欢迎来搅合BLOG:http://hi.baidu.com/tranpol
官网:http://tierradesagrado.uueasy.com/
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-10-19
帖子
271
4
发表于 2009-1-28 08:42:53 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者

小柯的徒弟

梦石
0
星屑
1535
在线时间
1157 小时
注册时间
2008-5-24
帖子
3085

贵宾

5
发表于 2009-1-28 19:36:11 | 只看该作者
搜索@backlog_window.top_row += 1
把那一行的内容换成下面的内容

@backlog_window.top_row += 1 unless @backlog_window.top_row > ($game_system.backlog_line - @backlog_window.page_row_max - 1)

测试了下,应该没错吧
回复 支持 反对

使用道具 举报

Lv1.梦旅人

最BT美攻!

梦石
0
星屑
50
在线时间
3 小时
注册时间
2007-3-7
帖子
1407
6
 楼主| 发表于 2009-1-29 10:35:38 | 只看该作者
旅的想法是忽略空行直接全部显示吧

不过。。。我测试了下。。。。冒似还是不行啊
如果空行越来越多的话~~~。。。。。{/fd}
还是慢了的。。。OTL
恩这个想法倒是比去空行要简单点啊

====

忽然想到。。。。就是BLOG的行数没有把空行加上去的关系吧。。。
那。。。如何去显示。。。。那根本的东东还是没有更正啊。。。汗
骑士の圣堂最终版华丽丽登场~~

http://rpg.blue/viewthread.php?tid=116851
AVG原创自制游戏  
神の大陆出品
神之大陆游戏制作小组唯美为主BT为终(偏BL向)
欢迎来搅合BLOG:http://hi.baidu.com/tranpol
官网:http://tierradesagrado.uueasy.com/
回复 支持 反对

使用道具 举报

Lv3.寻梦者

小柯的徒弟

梦石
0
星屑
1535
在线时间
1157 小时
注册时间
2008-5-24
帖子
3085

贵宾

7
发表于 2009-1-29 15:50:58 | 只看该作者
用了炒饭的落叶岛测试了下,发现这个东西
     if $game_system.backlog.size > 100
       line = $game_system.backlog.size - 100
       for i in 0...$game_system.backlog.size - line
         $game_system.backlog = $game_system.backlog[i + line]
         #$game_system.backline = $game_system.backline[i + line]
       end
       $game_system.backlog_line = 100
       for i in 0...line
         $game_system.backlog.pop
         #$game_system.backline.pop
       end
     end
看了看应该是算错了……被我直接简化了……
     if $game_system.backlog.size > 100
       for i in 0...$game_system.backlog.size - 100
         $game_system.backlog_line -= $game_system.backlog[0].split(/\n/).size
         $game_system.backlog.delete_at 0
       end
     end
换成这样测试了500句还是没有发生问题。
系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

最BT美攻!

梦石
0
星屑
50
在线时间
3 小时
注册时间
2007-3-7
帖子
1407
8
 楼主| 发表于 2009-1-30 08:49:13 | 只看该作者
太感谢「旅」的回答了

另~~
俺知道另一个去空行的办法了
星大给俺直接去空行的办法
      @now_text = $game_temp.message_text
      backlog = @now_text.clone
      temp = backlog.split(/\n/)
      temp.delete("")
      backlog = ""
      for i in 0...temp.size
        backlog += temp
        backlog += "\n"
      end
      $backlog_line = temp.size
      $game_system.backlog_line += backlog.split(/\n/).size
      $game_system.backlog.push(backlog)

哦哦~~~~俺太爱他老人家了~~~~~继续狂亲一下~~~~
骑士の圣堂最终版华丽丽登场~~

http://rpg.blue/viewthread.php?tid=116851
AVG原创自制游戏  
神の大陆出品
神之大陆游戏制作小组唯美为主BT为终(偏BL向)
欢迎来搅合BLOG:http://hi.baidu.com/tranpol
官网:http://tierradesagrado.uueasy.com/
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-18 16:00

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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