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

Project1

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

[已经解决] 怎么制作读书系统?

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
34 小时
注册时间
2012-3-25
帖子
36
跳转到指定楼层
1
发表于 2012-4-2 13:12:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
怎么制作读书系统?
我看了《同福书局》认为不是很好,太烦
怎么用脚本和事件做出全屏式对话框,功能和普通对话框一样
还有,xp里面怎么让事件中文章里面输入的字全部显示出来?

Lv3.寻梦者

梦石
0
星屑
3852
在线时间
1582 小时
注册时间
2006-5-5
帖子
2743
2
发表于 2012-4-2 13:44:43 | 只看该作者
用这个脚本就可以了。如果没有添加其他脚本的话就直接打开5号开关就变成读书系统了;默认为8行字,也就是两次文章输入的宽度。八行以后用SE里的BOOK那个声音隔开就可以了
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================


  4. class Interpreter
  5.   
  6.   BOOK_READING = 5 # 默认打开5开关后进入读书系统
  7.   
  8.   #--------------------------------------------------------------------------
  9.   # ● 显示文章
  10.   #--------------------------------------------------------------------------
  11.   def command_101
  12.     # 另外的文章已经设置过 message_text 的情况下
  13.     if $game_temp.message_text != nil
  14.       # 结束
  15.       return false
  16.     end
  17.     # 设置信息结束后待机和返回调用标志
  18.     @message_waiting = true
  19.     $game_temp.message_proc = Proc.new { @message_waiting = false }
  20.     # message_text 设置为 1 行
  21.     $game_temp.message_text = @list[@index].parameters[0] + "\n"
  22.     line_count = 1
  23.     # 循环
  24.     loop do
  25.       # 下一个事件指令为文章两行以上的情况
  26.       if $game_switches[BOOK_READING] and @list[@index+1].code == 101#阅读书刊报纸
  27.         unless $game_temp.in_battle
  28.           $scene.message_window.height = 320
  29.           $scene.message_window.contents = Bitmap.new($scene.message_window.width - 32, $scene.message_window.height - 32)
  30.           $scene.message_window.contents.font.size = 20
  31.           $game_temp.message_text += @list[@index+1].parameters[0] +"\n"
  32.           line_count+=1
  33.           @index+=1
  34.         end
  35.       end
  36.       if $game_switches[BOOK_READING]==false
  37.         unless $game_temp.in_battle
  38.           if $scene.message_window.height == 320
  39.             $scene.message_window.height = 160
  40.             $scene.message_window.contents = Bitmap.new($scene.message_window.width - 32, $scene.message_window.height - 32)
  41.             $scene.message_window.contents.font.size = 22
  42.           end
  43.         end
  44.       end
  45.       if @list[@index+1].code == 401
  46.         # message_text 添加到第 2 行以下
  47.         $game_temp.message_text += @list[@index+1].parameters[0] + "\n"
  48.         line_count += 1
  49.       # 事件指令不在文章两行以下的情况
  50.       else
  51.         # 下一个事件指令为显示选择项的情况下
  52.         if @list[@index+1].code == 102
  53.           # 如果选择项能收纳在画面里
  54.           if @list[@index+1].parameters[0].size <= 4 - line_count
  55.             # 推进索引
  56.             @index += 1
  57.             # 设置选择项
  58.             $game_temp.choice_start = line_count
  59.             setup_choices(@list[@index].parameters)
  60.           end
  61.         # 下一个事件指令为处理输入数值的情况下
  62.         elsif @list[@index+1].code == 103
  63.           # 如果数值输入窗口能收纳在画面里
  64.           if line_count < 4
  65.             # 推进索引
  66.             @index += 1
  67.             # 设置输入数值
  68.             $game_temp.num_input_start = line_count
  69.             $game_temp.num_input_variable_id = @list[@index].parameters[0]
  70.             $game_temp.num_input_digits_max = @list[@index].parameters[1]
  71.           end
  72.         end
  73.         # 继续
  74.         return true
  75.       end
  76.       # 推进索引
  77.       @index += 1
  78.     end
  79.   end
  80. end

  81. class Scene_Map
  82.   attr_accessor :message_window
  83. end

  84. #==============================================================================
  85. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  86. #==============================================================================
复制代码

评分

参与人数 1星屑 +120 收起 理由
钢铁列兵 + 120

查看全部评分

步兵中尉
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
34 小时
注册时间
2012-3-25
帖子
36
3
 楼主| 发表于 2012-4-2 17:17:14 | 只看该作者
谢了,xp里面怎么让事件中文章里面输入的字全部显示出来?


‘‘──神殿传说于2012-4-2 17:22补充以下内容

还有,这个默认的8行怎么改?
’’
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
432
在线时间
4175 小时
注册时间
2010-6-26
帖子
6474
4
发表于 2012-4-14 02:51:52 | 只看该作者
本帖最后由 eve592370698 于 2012-4-14 02:55 编辑
步兵中尉 发表于 2012-4-2 13:44
用这个脚本就可以了。如果没有添加其他脚本的话就直接打开5号开关就变成读书系统了;默认为8行字,也就是两 ...


我记得有个读取TXT文件的脚本是最原始的,《同福书局》就是根据它增强扩展而来的。
  1. =begin
  2. 在脚本中输入 $scene = Scene_Read_NM.new 开启柳万岁爷的小图书馆脚本

  3. 在事件脚本中输入$scene = Scene_Read_SUPER.new可以运行柳大人的大图书馆脚本


  4. =end
  5. class Window_Reader < Window_Base
  6.   attr_accessor :text
  7.   def initialize(text, line)
  8.     @text = text
  9.     @line = line
  10.     super(50, 15, 540, 450)
  11.     self.contents = Bitmap.new(width - 32, height - 32)
  12.     self.contents.font.size = 20
  13.     refresh
  14.   end
  15. =begin
  16.   ❀刷新
  17. =end  
  18.   def refresh
  19.     self.contents.clear
  20.     self.contents.font.size = 20
  21.     self.contents.font.color = normal_color
  22.     j = 0
  23.     for i in @line..[@text.size - 1, @line + 14].min
  24.       self.contents.draw_text(0, 28 * j, 540 - 32, 28, @text[i])
  25.       j += 1
  26.     end
  27.     self.contents.font.size = 12
  28.     self.contents.font.color = Color.new(255,255,0,255)
  29.     self.contents.draw_text(0, 408, 540 - 32, 12, @line.to_s + "/" + (@text.size-1).to_s , 2)
  30.   end
  31.   
  32.   def add_1
  33.     @line += 1
  34.     @line = [@text.size - 1, @line].min
  35.     refresh
  36.   end  
  37.   
  38.   def minus_1
  39.     @line -= 1
  40.     @line = [0, @line].max
  41.     refresh
  42.   end
  43.   
  44.   def page_add
  45.     @line += 13
  46.     @line = [@text.size - 1, @line].min
  47.     refresh
  48.   end
  49.   
  50.   def page_back
  51.     @line -= 13
  52.     @line = [0, @line].max
  53.     refresh
  54.   end
  55.    
  56.   def renew(text, line)
  57.     @text = text
  58.     @line = line
  59.     refresh
  60.   end
  61.   
  62.   
  63. end


  64. class Window_Command < Window_Selectable
  65.   attr_reader :commands
  66. end
  67. =begin =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  68. ■ Scene_Read

  69. 柳万岁爷的小图书馆脚本
  70. =end # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  71. class Scene_Read_NM
  72.   #-----------------------------------------
  73.   # ● 主处理
  74.   #-----------------------------------------
  75.   def main
  76.     sp = Spriteset_Map.new
  77.     #↓调用读书的窗口
  78.     @read_window = Window_Reader.new([""], 0)
  79.     @read_window.opacity = 230
  80.     @read_window.z = 900
  81.     text = Dir["txt/*"]
  82.     @text = []
  83.     for tx in text
  84.       @text.push (tx.split(/\//)[1].split(/.txt/)[0])
  85.     end
  86.     @command_window = Window_Command.new(180, @text)
  87.     @command_window.y = (480 - @command_window.height)/2
  88.     @command_window.opacity = 230
  89.     @command_window.z = 999
  90.     @doing = 1
  91.     Graphics.transition
  92.     # 主循环
  93.     loop do
  94.       # 刷新游戏画面
  95.       Graphics.update
  96.       # 刷新输入信息
  97.       Input.update
  98.       # 刷新画面
  99.       update
  100.       # 如果画面切换的话就中断循环
  101.       if $scene != self
  102.         break
  103.       end
  104.     end
  105.     # 准备过渡
  106.     Graphics.freeze
  107.     @command_window.dispose if !@command_window.disposed?
  108.     @read_window.dispose
  109.     sp.dispose
  110.   end
  111.   
  112.   def update
  113.     case @doing
  114.     when 1 #选书
  115.       update_1
  116.     when 2 #读书
  117.       update_2
  118.     end
  119.   end
  120.   
  121.   def update_1   
  122.     @command_window.update
  123.     if Input.trigger?(Input::B)
  124.       $game_system.se_play($data_system.cancel_se)
  125.       $scene = Scene_Map.new
  126.     end
  127.     if Input.trigger?(Input::C)
  128.       $game_system.se_play($data_system.decision_se)
  129.       filename = "txt/" + @command_window.commands[@command_window.index] + ".txt"
  130.       file = File.open(filename, "r")
  131.       r = file.readlines
  132.       @real_text = []
  133.       for i in 0...r.size
  134.         temp_story = r[i].split(/\n/)[0]        
  135.         temp_story.gsub!(/,/) {","} if temp_story != nil
  136.         temp_story.gsub!(/\./) {"。"} if temp_story != nil
  137.         temp_story.gsub!(/  /) {" "} if temp_story != nil
  138.         while(temp_story != nil)
  139.           text = ""
  140.           if temp_story.length > 75
  141.             text = temp_story.slice!(0,75)
  142.           else
  143.             text = temp_story
  144.             temp_story = nil
  145.           end
  146.           @real_text.push(text)
  147.         end
  148.       end
  149.       file.close
  150.       @read_window.renew(@real_text, 0)
  151.       @command_window.visible = false
  152.       @command_window.active = false
  153.       @doing = 2
  154.     end
  155.   end
  156.   
  157.   
  158.   def update_2
  159.     @read_window.update
  160.     if Input.trigger?(Input::B)
  161.       $game_system.se_play($data_system.cancel_se)
  162.       @command_window.visible = true
  163.       @command_window.active = true
  164.       @doing = 1
  165.     end
  166.     if Input.trigger?(Input::UP)
  167.       $game_system.se_play($data_system.cursor_se)
  168.       @read_window.minus_1
  169.     end
  170.     if Input.trigger?(Input::DOWN)
  171.       $game_system.se_play($data_system.cursor_se)
  172.       @read_window.add_1
  173.     end
  174.     if Input.trigger?(Input::L) or Input.trigger?(Input::LEFT)
  175.       $game_system.se_play($data_system.cursor_se)
  176.       @read_window.page_back
  177.     end
  178.     if Input.trigger?(Input::R) or Input.trigger?(Input::RIGHT)
  179.       $game_system.se_play($data_system.cursor_se)
  180.       @read_window.page_add
  181.     end
  182.   end
  183.   
  184. end
  185. =begin
  186. # ■ Scene_Read
  187. =end

  188. class Scene_Read_SUPER
  189.   #--------------------------------------------------------------------------
  190.   # ● 主处理
  191.   #--------------------------------------------------------------------------
  192.   def main
  193.     sp = Spriteset_Map.new
  194.     @read_window = Window_Reader.new([""], 0)
  195.     @read_window.opacity = 230
  196.     @read_window.z = 900
  197.     @command_window = Window_Command.new(180, ["选音乐","选书阅读"])
  198.     @command_window.y = (480 - @command_window.height)/2
  199.     @command_window.opacity = 230
  200.     @command_window.z = 999
  201.     @doing = 0
  202.     Graphics.transition
  203.     # 主循环
  204.     loop do
  205.       # 刷新游戏画面
  206.       Graphics.update
  207.       # 刷新输入信息
  208.       Input.update
  209.       # 刷新画面
  210.       update
  211.       # 如果画面切换的话就中断循环
  212.       if $scene != self
  213.         break
  214.       end
  215.     end
  216.     # 准备过渡
  217.     Graphics.freeze
  218.     @command_window.dispose if !@command_window.disposed?
  219.     @read_window.dispose
  220.     sp.dispose
  221.   end
  222.   
  223.   def update
  224.     case @doing
  225.     when 0 #选项
  226.       update_0
  227.     when 1 #选书
  228.       update_1
  229.     when 2 #读书
  230.       update_2
  231.     when 3 #选音乐
  232.       update_3
  233.     end
  234.   end
  235.   
  236.   def update_0
  237.     @command_window.update
  238.     if Input.trigger?(Input::C)
  239.       case @command_window.index
  240.       when 0
  241.         $game_system.se_play($data_system.decision_se)
  242.         text = Dir["Audio/BGM/*"]
  243.         @text = []
  244.         for tx in text
  245.           @text.push(tx.split(/BGM\//)[1])
  246.         end
  247.         @command_window.dispose
  248.         @command_window = Window_Command.new(180, @text)
  249.         @command_window.y = (480 - @command_window.height)/2
  250.         @command_window.opacity = 230
  251.         @command_window.z = 999
  252.         @doing = 3        
  253.       when 1
  254.         $game_system.se_play($data_system.decision_se)
  255.         text = Dir["txt/*"]
  256.         @text = []
  257.         for tx in text
  258.           @text.push (tx.split(/\//)[1].split(/.txt/)[0])
  259.         end
  260.         @command_window.dispose
  261.         @command_window = Window_Command.new(180, @text)
  262.         @command_window.y = (480 - @command_window.height)/2
  263.         @command_window.opacity = 230
  264.         @command_window.z = 999
  265.         @doing = 1
  266.       when 2
  267.         $game_system.se_play($data_system.decision_se)
  268.         @command_window.visible = false
  269.         @command_window.active = false
  270.         @doing = 2
  271.       end
  272.     end
  273.     if Input.trigger?(Input::B)
  274.       $game_system.se_play($data_system.decision_se)
  275.       $scene = Scene_Map.new
  276.     end         
  277.   end
  278.   
  279.   def update_1   
  280.     @command_window.update
  281.     if Input.trigger?(Input::B)
  282.       $game_system.se_play($data_system.cancel_se)
  283.       @doing = 0
  284.       @command_window.dispose
  285.       if @read_window.text != [""]
  286.         @command_window = Window_Command.new(180, ["选音乐","选书阅读","继续阅读"])
  287.       else
  288.         @command_window = Window_Command.new(180, ["选音乐","选书阅读"])
  289.       end
  290.       @command_window.y = (480 - @command_window.height)/2
  291.       @command_window.opacity = 230
  292.       @command_window.z = 999
  293.     end
  294.     if Input.trigger?(Input::C)
  295.       $game_system.se_play($data_system.decision_se)
  296.       filename = "txt/" + @command_window.commands[@command_window.index] + ".txt"
  297.       file = File.open(filename, "r")
  298.       r = file.readlines
  299.       @real_text = []
  300.       for i in 0...r.size
  301.         temp_story = r[i].split(/\n/)[0]
  302.         temp_story.gsub!(/,/) {","} if temp_story != nil
  303.         temp_story.gsub!(/\./) {"。"} if temp_story != nil
  304.         temp_story.gsub!(/  /) {" "} if temp_story != nil
  305.         while(temp_story != nil)
  306.           text = ""
  307.           if temp_story.length > 75
  308.             text = temp_story.slice!(0,75)
  309.           else
  310.             text = temp_story
  311.             temp_story = nil
  312.           end
  313.           @real_text.push(text)
  314.         end
  315.       end
  316.       file.close
  317.       @read_window.renew(@real_text, 0)
  318.       @command_window.visible = false
  319.       @command_window.active = false
  320.       @doing = 2
  321.     end
  322.   end
  323.   
  324.   
  325.   def update_2
  326.     @read_window.update
  327.     if Input.trigger?(Input::B)
  328.       $game_system.se_play($data_system.decision_se)
  329.       @doing = 0
  330.       @command_window.dispose
  331.       if @read_window.text != [""]
  332.         @command_window = Window_Command.new(180, ["选音乐","选书阅读","继续阅读"])
  333.       else
  334.         @command_window = Window_Command.new(180, ["选音乐","选书阅读"])
  335.       end
  336.       @command_window.y = (480 - @command_window.height)/2
  337.       @command_window.opacity = 230
  338.       @command_window.z = 999
  339.       @doing = 0
  340.     end
  341.     if Input.trigger?(Input::UP)
  342.       $game_system.se_play($data_system.cursor_se)
  343.       @read_window.minus_1
  344.     end
  345.     if Input.trigger?(Input::DOWN)
  346.       $game_system.se_play($data_system.cursor_se)
  347.       @read_window.add_1
  348.     end
  349.     if Input.trigger?(Input::L) or Input.trigger?(Input::LEFT)
  350.       $game_system.se_play($data_system.cursor_se)
  351.       @read_window.page_back
  352.     end
  353.     if Input.trigger?(Input::R) or Input.trigger?(Input::RIGHT)
  354.       $game_system.se_play($data_system.cursor_se)
  355.       @read_window.page_add
  356.     end
  357.   end
  358.   
  359.   def update_3   
  360.     @command_window.update
  361.     if Input.trigger?(Input::C)
  362.       $game_system.se_play($data_system.decision_se)
  363.       filename = "Audio/BGM/" + @command_window.commands[@command_window.index]
  364.       Audio.bgm_play(filename, 100, 100)
  365.     end
  366.     if Input.trigger?(Input::B)
  367.       $game_system.se_play($data_system.cancel_se)
  368.       @doing = 0
  369.       @command_window.dispose
  370.       if @read_window.text != [""]
  371.         @command_window = Window_Command.new(180, ["选音乐","选书阅读","继续阅读"])
  372.       else
  373.         @command_window = Window_Command.new(180, ["选音乐","选书阅读"])
  374.       end
  375.       @command_window.y = (480 - @command_window.height)/2
  376.       @command_window.opacity = 230
  377.       @command_window.z = 999
  378.     end
  379.   end
  380.    
  381.   
  382. end
复制代码
您的这个智能合并脚本挺不错。
不过我一般是用FUKI对话框,要输入大段文章我都是在事件中输入
  1. $game_temp.message_text = "半角双引号内是文章内容"
复制代码
另外可以参考我的86版FUKI对话框。
潜水,专心忙活三次元工作了……
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3852
在线时间
1582 小时
注册时间
2006-5-5
帖子
2743
5
发表于 2012-4-14 12:28:04 | 只看该作者
eve592370698 发表于 2012-4-14 02:51
我记得有个读取TXT文件的脚本是最原始的,《同福书局》就是根据它增强扩展而来的。您的这个智能合并脚本 ...

这套系统我没用过,我一直用我用的那套。
如果用了FUKI对话框的话就要在使用前添加FUKI的脚本起头

评分

参与人数 1星屑 +120 收起 理由
钢铁列兵 + 120

查看全部评分

步兵中尉
回复

使用道具 举报

Lv1.梦旅人

反伸手党斗士

梦石
0
星屑
91
在线时间
1128 小时
注册时间
2009-9-10
帖子
2513

贵宾

6
发表于 2012-4-14 20:50:35 | 只看该作者
曾经有一个图书馆系统,收录在宝典里
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-27 03:13

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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