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

Project1

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

[RMVA发布] 帮朋友制作的一个事件薄菜单

[复制链接]

Lv1.梦旅人

梦石
0
星屑
60
在线时间
9 小时
注册时间
2007-2-23
帖子
26
跳转到指定楼层
1
发表于 2013-4-13 18:35:42 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 rrobin 于 2013-4-13 19:05 编辑

朋友在做一个侦探类的游戏,需要记录发成过的案件以及得到的线索,于是就帮忙做了一个
具体的内容有:
1.在主界面显示一个菜单选项,默认为"事件薄",可自定义,按ok进入事件薄主界面
2.事件薄主界面1显示章节标签,事件薄封面资源可替换,标签资源可替换,每页显示标签数可设置,指示标签(当所有标签大于显示标签数量时出现)内容可替换
3.事件薄主界面2显示案件标签,按ok进入案件线索界面
4.线索详细内容自动换行
5.章节名,案件名,线索名,线索详细内容均可自定义
6.可保存,可读取
效果图:


评分

参与人数 1星屑 +20 收起 理由
joe5491 + 20 塞糖

查看全部评分

Lv1.梦旅人

梦石
0
星屑
60
在线时间
9 小时
注册时间
2007-2-23
帖子
26
2
 楼主| 发表于 2013-4-13 18:42:36 | 只看该作者
本帖最后由 rrobin 于 2013-4-13 21:53 编辑

效果图:


RUBY 代码复制
  1. #-----------------------------------------------------------------------------
  2. # 游戏任务事件对象
  3. #-----------------------------------------------------------------------------
  4.  
  5. class Game_EventVariables
  6.   attr_accessor :Chapter        #进行了的章节
  7.   attr_accessor :Last_Chapter   #正在进行的章节
  8.   def initialize
  9.     @Chapter = []
  10.     @Last_Chapter = -1
  11.   end
  12.  
  13.   # 新的一章开始时调用
  14.   # 此调用必须!! 否则保存的事件薄数据将会错误
  15.   # 最好在新章节开始时过场事件内调用
  16.   def StartChapter(name)
  17.     chapter = EventBookDef.getChapter(name)
  18.     if !EventBookDef.has_Chapter?(chapter.id)
  19.       msgbox("使用了未定义的章节名<#{name}>")
  20.       return
  21.     end
  22.     if @Chapter.include?(chapter.id)
  23.       msgbox("已经进行过了此章节<#{name}>")
  24.       return
  25.     end
  26.     @Chapter[chapter.id] = Game_SaveChapter.new(chapter.id)
  27.     @Last_Chapter = chapter.id
  28.   end
  29.  
  30.  
  31.   # 获得一个案件的线索时调用 传入案件名字以及对应的线索名字
  32.   def FindKey(caseName,keyName)
  33.     chapter = EventBookDef.getChapterByIndex(@Last_Chapter)
  34.     if chapter == nil
  35.       msgbox("获得线索时未找到当前章节,确认是否在章节开始时调用过StartChapter脚本")
  36.       return
  37.     end
  38.     caseName.gsub!(/\n/) {""}  #去掉脚本输入框带来的\n
  39.     caseTemp = chapter.getCase(caseName)
  40.     if caseTemp == nil
  41.       msgbox("未在当前章节找到案件<#{caseName}>")
  42.       return
  43.     end
  44.     keyName.gsub!(/\n/) {""}   #去掉脚本输入框带来的\n
  45.     keyIndex = caseTemp.getKeyIndex(keyName)
  46.     if keyIndex == -1
  47.       msgbox("未在当前章节案件<#{caseName}>中找到线索<#{keyName}>")
  48.       return
  49.     end
  50.     @Chapter[@Last_Chapter].getCase(caseTemp.id).addKey(keyIndex)
  51.   end
  52. end
  53.  
  54. # 用来保存的数据
  55. class Game_SaveChapter
  56. attr_accessor :id
  57. attr_accessor :case
  58.   def initialize(id)
  59.     @id = id
  60.     @case = []          # 正在进行中的案件,保存index
  61.   end
  62.  
  63.   def getCase(index)
  64.     return @case[index]  if @case.size > index
  65.     @case[index] = Game_SaveCase.new(index)
  66.     return @case[index]
  67.   end
  68. end
  69.  
  70. class Game_SaveCase
  71. attr_accessor :id
  72. attr_accessor :Keys       # 已获得的Key,保存index
  73.   def initialize(id)
  74.     @id = id
  75.     @Keys = []
  76.   end
  77.  
  78.   def addKey(key_id)
  79.     @Keys.push key_id unless @Keys.include?(key_id)
  80.   end
  81. end
  82.  
  83.  
  84. # 用来显示的数据
  85.  
  86. class Game_Chapter
  87. attr_accessor :name
  88. attr_accessor :id
  89.   def initialize(name,id)
  90.    @name = name
  91.    @id = id
  92.    @case = {}
  93. end
  94.  
  95. def addCase(name)
  96.    return @case[name] if @case.include?(name)
  97.    @case[name] = Game_Case.new(name,@case.size)
  98. end
  99.  
  100. def getCase(name)
  101.     return nil unless @case.include?(name)
  102.     return @case[name]
  103.   end
  104.  
  105.   def getCaseName(index)
  106.     @case.each { |p| return p[1].name if p[1].id == index}
  107.     return "未知案件"
  108.   end
  109.  
  110. end
  111.  
  112.  
  113. class Game_Case
  114.   attr_accessor :name
  115.   attr_accessor :id
  116.   def initialize(name,id)
  117.     @name = name
  118.     @id = id
  119.     [url=home.php?mod=space&uid=20462]@KEY[/url] = []
  120.   end
  121.  
  122.   def Key(index)
  123.       return nil unless @key.size > index
  124.       return @key[index]
  125.   end
  126.  
  127.   def addKey(keyname, keydetail)
  128.     @key.each{|p| return if p.name == keyname }
  129.     @key.push(Game_EventKey.new(keyname,keydetail))  
  130.   end
  131.  
  132.   def getKeyIndex(keyname)
  133.     i = 0
  134.     until i >= @key.size
  135.       return i if @key[i].name == keyname  
  136.       i += 1
  137.     end
  138.     return -1
  139.   end
  140. end
  141.  
  142.  
  143. class Game_EventKey
  144.   attr_accessor :name
  145.   attr_accessor :detail
  146.  
  147.   def initialize(name,detail)
  148.     @name = name
  149.     @detail = detail
  150.   end
  151. end
  152.  
  153. #-----------------------------------------------------------------------------
  154. # 事件薄系统宏
  155. #-----------------------------------------------------------------------------
  156.  
  157. module EventBookDef
  158.  
  159.   def self.init()
  160.     @Chapter = {}
  161.     create_all_chapter
  162.     @ChapterCount = @Chapter.size
  163.   end
  164.  
  165.   Menu  = "事件薄"
  166.  
  167.   # 文件存放路径
  168.   ResFolder = "Graphics/EventBook/"
  169.   # 事件薄封面图
  170.   ResCover =  "cover"
  171.   # 标签图
  172.   ResTag   =  "tag"
  173.  
  174.   # 事件薄侧标签最大显示个数
  175.   BookTagPreCount = 5
  176.  
  177.   # 这里最好自己用注释做一些分类,按章节,按案件内容随个人喜好, 这里并不需要顺序的添加
  178.   # 章节里线索信息
  179.   def self.create_all_chapter
  180.     addKey("章节1","案件1","线索1","看看这里能不能编辑需要显示的文字,看看这里能不能编辑需要显示的
  181. 文字.看看这里能不能编辑需要显示的文字,看看这里能不能编辑需要
  182. 显示的文字")
  183.     addKey("章节1","案件1","线索2","测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行")
  184.     addKey("章节1","案件1","线索3","测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行")
  185.     addKey("章节1","案件2","线索1","测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行")
  186.     addKey("章节1","案件2","线索1","测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行")
  187.     addKey("章节1","案件2","线索1","测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行")
  188.     addKey("章节1","案件3","线索1","测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行测试多行")
  189.   end
  190.  
  191.   def self.addChapter(chapter)
  192.     @Chapter[chapter] = Game_Chapter.new(chapter,@Chapter.size) unless @Chapter.include?(chapter)
  193.     return @Chapter[chapter]
  194.   end
  195.  
  196.   def self.getChapter(chapter)
  197.     return @Chapter[chapter] if @Chapter.include?(chapter)
  198.     return addChapter(chapter)
  199.   end
  200.  
  201.   def self.has_Chapter?(index)
  202.     @ChapterCount > index
  203.   end
  204.  
  205.   def self.getChapterByIndex(index)
  206.     @Chapter.each do |p|
  207.       return p[1] if p[1].id == index
  208.     end
  209.     return nil
  210.   end
  211.  
  212.   def self.getChapterName(index)
  213.  
  214.     @Chapter.each do |p|
  215.       return p[1].name if p[1].id == index
  216.     end
  217.     return "未知章节"
  218.   end
  219.  
  220.   def self.getCaseName(chapter,case_id)
  221.     return "未知案件" unless @Chapter.include?(chapter)
  222.     return @Chapter[chapter].getCaseName(case_id)
  223.   end
  224.  
  225.   def self.addKey(chapter,_case,key,detail)
  226.     getChapter(chapter).addCase(_case).addKey(key,detail)
  227.   end
  228.  
  229.   def self.setDetailData(data)
  230.     @detailData = data
  231.   end
  232.  
  233.   def self.getDetailData()
  234.     return @detailData
  235.   end
  236.  
  237.   PointText = "..."
  238. end
  239.  
  240.  
  241. #-----------------------------------------------------------------------------
  242. # 事件薄主界面
  243. #-----------------------------------------------------------------------------
  244.  
  245. # 事件薄标签
  246. class EventNoteTag < Sprite
  247. attr_accessor:info
  248.   def initialize(viewport = nil)
  249.     super(viewport)
  250.     create_tag
  251.   end
  252.  
  253.   def dispose
  254.     self.bitmap.dispose if bitmap
  255.     super
  256.   end
  257.  
  258.   def selected
  259.     self.zoom_x = 1.1
  260.     self.zoom_y = 1.1
  261.   end
  262.  
  263.   def unselected
  264.     self.zoom_x = 1
  265.     self.zoom_y = 1
  266.   end
  267.  
  268.   def create_tag
  269.     self.bitmap = Cache.load_bitmap(EventBookDef::ResFolder,EventBookDef::ResTag).clone
  270.   end
  271.  
  272.   def setPos(x,y)
  273.     self.x = x
  274.     self.y = y
  275.   end
  276.  
  277.   def update
  278.     super
  279.   end
  280.  
  281.   def info=(info)
  282.     @info = info
  283.     update_info
  284.   end
  285.  
  286.   def update_info
  287.     #self.contents.draw_text(self.bitmap.rect,"",1)
  288.     self.bitmap.clear
  289.     self.bitmap = Cache.load_bitmap(EventBookDef::ResFolder,EventBookDef::ResTag).clone
  290.     self.bitmap.draw_text(self.bitmap.rect,info,1)
  291.   end
  292. end
  293.  
  294. # 事件薄标签菜单
  295. class EventNoteMenu < Window
  296. attr_accessor:preCount        #一页可显示标签数
  297. attr_accessor:index           #当前光标所在位置
  298.  
  299. attr_reader:startIndex        #当前页开始位置
  300. attr_reader:endIndex          #当前页结束位置
  301.  
  302.   def initialize(preCount = 1,x,y,w,h)
  303.      super(x,y,w,h)
  304.      @preCount = preCount
  305.      @viewport = Viewport.new
  306.      @tags = []
  307.      @tagsData = []
  308.      @pointTag = []
  309.      @index = -1
  310.      @last_index = -2
  311.      @maxSize = 0
  312.      @startIndex = 0
  313.      @last_startIndex = -1
  314.      @maxSize > @preCount ? @endIndex = @preCount : @endIndex = @maxSize
  315.      create_onePageTags
  316.      create_pointTags
  317.      update_tagsContent
  318.      update_tags
  319.      #select(0)
  320.    end
  321.  
  322.   def dispose
  323.     @viewport.dispose if @viewport
  324.     super
  325.   end
  326.  
  327.   def create_onePageTags
  328.     count = 0
  329.     until count == @preCount || count == @maxSize
  330.       @tags.push(EventNoteTag.new(@viewport))
  331.       count+=1
  332.     end
  333.     @startIndex = 0 if @maxSize
  334.   end  
  335.  
  336.   def create_pointTags
  337.     return unless @maxSize > @preCount
  338.     @pointTag[0] = EventNoteTag.new(@viewport)
  339.     @pointTag[0].x = x
  340.     @pointTag[0].y = y
  341.     @pointTag[0].info = EventBookDef::PointText
  342.     @pointTag[1] = EventNoteTag.new(@viewport)
  343.     @pointTag[1].info = EventBookDef::PointText
  344.     @pointTag[1].x = x
  345.     @pointTag[1].y = y
  346.   end
  347.  
  348.   def setData(tagsData)
  349.     @tagsData.clear if @tagsData
  350.     @tagsData = tagsData
  351.     @maxSize = @tagsData.size
  352.     @maxSize > @preCount ? @endIndex = @preCount : @endIndex = @maxSize
  353.     @tags.each {|tag| tag.dispose}
  354.     @tags.clear
  355.     @pointTag.each{|tag| tag.dispose }
  356.     @pointTag.clear
  357.     create_onePageTags
  358.     create_pointTags
  359.     update_tagsContent
  360.     @index = -1
  361.     @last_index = -2
  362.     update_tags
  363.     select(0)
  364.   end
  365.  
  366.   def getData
  367.     return @tagsData[@startIndex + @index] if @index && @startIndex
  368.     return nil
  369.   end
  370.  
  371.   def cursor_movable?
  372.     @index >= 0 && @index < @preCount
  373.   end
  374.  
  375.   def cursor_up(wrap = false)
  376.     @index -= 1
  377.     select(@index)
  378.   end
  379.  
  380.   def cursor_down(wrap = false)   
  381.     @index += 1
  382.     select(@index)
  383.   end
  384.  
  385.   def pageUp
  386.     @index -= @preCount
  387.     select([@index,@startIndex].max)
  388.   end
  389.  
  390.   def pageDown
  391.     @index += @preCount
  392.     select([@index,@endIndex].min)
  393.   end
  394.  
  395.   def select(index)
  396.     return unless @maxSize != 0
  397.     @index = index
  398.     if @index < 0
  399.       if @startIndex > 0
  400.         @startIndex -= 1
  401.         @endIndex -= 1
  402.       else
  403.         Sound.play_buzzer
  404.       end
  405.       @index = 0
  406.       update_tagsContent
  407.       Sound.play_cursor
  408.     else
  409.       if @index == (@endIndex - @startIndex)
  410.         if @endIndex != @maxSize
  411.           @startIndex += 1
  412.           @endIndex += 1
  413.         else
  414.           Sound.play_buzzer
  415.         end
  416.         @index -= 1
  417.         update_tagsContent
  418.         Sound.play_cursor
  419.       end
  420.     end
  421.     @tags[@index].selected if @index >= 0
  422.     @tags[@last_index].unselected if @last_index >= 0 &&  @index != @last_index
  423.     update_tags
  424.   end
  425.  
  426.   def process_cursor_move
  427.     return unless cursor_movable?
  428.     @last_index = @index
  429.     cursor_down (Input.trigger?(:DOWN))  if Input.repeat?(:DOWN)
  430.     cursor_up   (Input.trigger?(:UP))    if Input.repeat?(:UP)
  431.     pageUp      if Input.trigger?(:R)
  432.     pageDown    if Input.trigger?(:L)
  433.     Sound.play_cursor if @index != @last_index
  434.   end
  435.  
  436.   def update
  437.     super
  438.     process_cursor_move
  439.   end
  440.  
  441.   def update_tags
  442.     #return unless @index != @last_index
  443.     index = 0
  444.     height = 0
  445.     until index == @preCount || index == @maxSize
  446.       @tags[index].setPos(x,(index+1) * @tags[index].height + y) if index != @index
  447.       @tags[index].setPos(x, @tags[index-1].height * index+@tags[index].height + y) if index > 0
  448.       height = @tags[index].y
  449.       index += 1
  450.     end
  451.     update_pointTags(height)
  452.   end
  453.  
  454.   def update_pointTags(height)
  455.       return unless @maxSize > @preCount
  456.       @startIndex == 0 ? @pointTag[0].visible = false : @pointTag[0].visible = true
  457.       @endIndex == @maxSize ? @pointTag[1].visible = false : @pointTag[1].visible = true
  458.       @pointTag[1].setPos(x,height+@pointTag[1].height)
  459.   end
  460.  
  461.   def update_tagsContent
  462.     index = 0
  463.     until index == @preCount || index == @maxSize
  464.     @tags[index].info = @tagsData[@startIndex + index][:text]
  465.     index += 1
  466.     end
  467.   end
  468. end
  469.  
  470.  
  471. #--------------------------------------------------------------------------------
  472. # 事件薄详细内容窗口
  473. #--------------------------------------------------------------------------------
  474. class Window_EventBook < Window_Selectable
  475.   #--------------------------------------------------------------------------
  476.   # ● 定义实例变量
  477.   #--------------------------------------------------------------------------
  478.   attr_accessor :BGSprite
  479.   attr_accessor :type
  480.  
  481.   def initialize
  482.     @BGSprite = Sprite.new(Viewport.new)
  483.     @BGSprite.bitmap = Cache.load_bitmap(EventBookDef::ResFolder,EventBookDef::ResCover)
  484.     bitmapTemp = Cache.load_bitmap(EventBookDef::ResFolder,EventBookDef::ResTag)
  485.     if @BGSprite != nil
  486.       super(([email]Graphics.width-@BGSprite.width[/email] - bitmapTemp.width)/2,(Graphics.height - @BGSprite.height)/2, @BGSprite.width, @BGSprite.height)
  487.     else
  488.       super(([email]Graphics.width-@BGSprite.width[/email] - bitmapTemp.width)/2,(Graphics.height - @BGSprite.height)/2, Graphics.width, Graphics.height)
  489.     end
  490.     @BGSprite.x = self.x
  491.     @BGSprite.y = self.y
  492.     self.windowskin = nil
  493.     preCount = EventBookDef::BookTagPreCount + 2#@BGSprite.height / bitmapTemp.height
  494.     book_x = x + @BGSprite.width
  495.     book_y = y + (@BGSprite.height - bitmapTemp.height*preCount)/2
  496.     preCount -= 2 #这里减去上下翻页提示数量
  497.     @book_menu = EventNoteMenu.new(preCount,book_x,book_y,bitmapTemp.width,bitmapTemp.height*preCount)
  498.     bitmapTemp.dispose
  499.     @type = 0
  500.     @dirty = true
  501.     activate
  502.   end
  503.  
  504.   def Type?(type)
  505.     @type == type
  506.   end
  507.  
  508.   def type=(type)
  509.     @type = type
  510.     @dirty = true
  511.   end
  512.  
  513.   def switchChapters
  514.     return unless @book_menu != nil
  515.     if @type == 0 && @dirty
  516.       data = []
  517.       i = 0
  518.       if $game_eventVar.Last_Chapter == -1
  519.         msgbox("未调用任何StartChapter")
  520.         @dirty = false
  521.         return
  522.       end
  523.       until i > $game_eventVar.Last_Chapter
  524.         data.push({:text=>EventBookDef.getChapterByIndex(i).name,:context => i})
  525.         i+=1
  526.       end
  527.        @book_menu.setData(data)
  528.         @dirty = false
  529.     end
  530.   end
  531.  
  532. def switchEvent
  533.     return unless @book_menu != nil
  534.     if @type == 1 && @dirty
  535.      @dirty = false
  536.      data = []
  537.      @chapter = @book_menu.getData
  538.      if @chapter == nil
  539.        @type = 0
  540.        Sound.play_buzzer
  541.        return
  542.      end
  543.      caseTemp = $game_eventVar.Chapter[@book_menu.getData[:context]].case
  544.      if caseTemp.size == 0
  545.        @type = 0
  546.        Sound.play_buzzer
  547.        return
  548.      end
  549.      caseTemp.each {|p| data.push({:text=>EventBookDef.getCaseName(@chapter[:text],p.id),:context=>p.id})}
  550.      @book_menu.setData(data)
  551.     end
  552.   end
  553.  
  554.   def update
  555.     super
  556.     @book_menu.update
  557.     switchChapters
  558.     switchEvent
  559.   end
  560.  
  561.   def selectEvent
  562.      data = {:chapter=>@chapter,:case=>@book_menu.getData}
  563.      EventBookDef.setDetailData(data)
  564.   end
  565. end
  566.  
  567. #-------------------------------------------------------------------------
  568. # 事件薄界面
  569. #-------------------------------------------------------------------------
  570.  
  571. class Scene_EventBook < Scene_MenuBase
  572.    def start
  573.     super
  574.     create_book
  575.   end
  576.  
  577.   def create_book
  578.     @book_window = Window_EventBook.new
  579.     @book_window.set_handler(:cancel, method(:on_cancel))
  580.     @book_window.set_handler(:ok, method(:on_ok))
  581.   end
  582.  
  583.   def on_cancel
  584.     case @book_window.type
  585.     when 1
  586.       @book_window.type = 0
  587.       @book_window.activate
  588.     when 0
  589.       return_scene
  590.     end
  591.   end
  592.  
  593.   def on_ok
  594.     case @book_window.type
  595.     when 0
  596.       @book_window.type = 1
  597.       @book_window.activate
  598.     when 1
  599.       @book_window.selectEvent
  600.       SceneManager.call(Scene_EventDetail)
  601.     end
  602.   end
  603. end
  604.  
  605.  
  606. #------------------------------------------------------------------------------
  607. # 事件薄案件详细内容场景
  608. #------------------------------------------------------------------------------
  609.  
  610.  
  611. class Scene_EventDetail < Scene_Base
  612.   def start
  613.     super
  614.     create_detailWindow
  615.   end
  616.  
  617.   def create_detailWindow
  618.     @detail_window = Window_EventDetail.new()
  619.     @detail_window.set_handler(:cancel,method(:return_scene))
  620.   end  
  621. end
  622.  
  623. #------------------------------------------------------------------------------
  624. # 事件薄案件详细内容窗口
  625. #------------------------------------------------------------------------------
  626.  
  627. class Window_EventDetail < Window_Selectable
  628.    def initialize
  629.     super(0, 0, Graphics.width, Graphics.height)
  630.     @data = EventBookDef.getDetailData
  631.     @line = 0
  632.     create_tile
  633.     create_key_content
  634.     activate
  635.   end
  636.  
  637.   def create_tile
  638.       str = @data[:case][:text]
  639.       p str
  640.       draw_text_ex((Graphics.width-text_size(str).width)/2,Font.default_size * @line,str)
  641.       @line += 1
  642.   end
  643.  
  644.  
  645.   def create_key_content
  646.      # 画线索的名字
  647.      chapter = @data[:chapter]
  648.      castTemp = $game_eventVar.Chapter[chapter[:context]].getCase(@data[:case][:context])
  649.      i = 0
  650.      until i >= castTemp.Keys.size
  651.        chapterIns = EventBookDef.getChapterByIndex(chapter[:context])
  652.        caseIns = chapterIns.getCase(@data[:case][:text])
  653.        keyIns = caseIns.Key(castTemp.Keys[i])
  654.        draw_text_ex(4, Font.default_size*@line,keyIns.name)
  655.        @line += 1
  656.        draw_text_ex(20,Font.default_size*@line,keyIns.detail)
  657.        @line += 1
  658.        i+=1
  659.      end
  660.    end
  661.  
  662.   # 难道需要自动换行?
  663.     #--------------------------------------------------------------------------
  664.   # ● 文字的处理
  665.   #     c    : 文字
  666.   #     text : 绘制处理中的字符串缓存(字符串可能会被修改)
  667.   #     pos  : 绘制位置 {:x, :y, :new_x, :height}
  668.   #--------------------------------------------------------------------------
  669.   alias parent_process_character process_character
  670.   def process_character(c, text, pos)
  671.     case c
  672.     when "\r"   # 回车
  673.       return
  674.     when "\n"   # 换行
  675.       return
  676.     when "\f"   # 翻页
  677.       return
  678.     when "\e"   # 控制符
  679.       process_escape_character(obtain_escape_code(text), text, pos)
  680.     else        # 普通文字
  681.       process_normal_character(c,pos)
  682.       process_next_character(text.slice(0,1),text,pos)
  683.     end
  684.   end
  685.  
  686.  
  687.   def process_next_character(c,text,pos)
  688.     case c
  689.     when "\r"
  690.       return
  691.     when "\n"
  692.       return
  693.     when "\f"
  694.       return
  695.     when "\e"
  696.       return
  697.     else
  698.       next_pos = pos[:x] + text_size(c).width * 2 + self.padding
  699.       if next_pos > width
  700.         process_new_line(text,pos)
  701.         @line += 1
  702.       end
  703.     end
  704.   end
  705. end


下面是在原始脚本里添加的
DataManager里
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 生成各种游戏对象
  3.   #--------------------------------------------------------------------------
  4.   def self.create_game_objects
  5.     $game_temp          = Game_Temp.new
  6.     $game_system        = Game_System.new
  7.     $game_timer         = Game_Timer.new
  8.     $game_message       = Game_Message.new
  9.     $game_switches      = Game_Switches.new
  10.     $game_variables     = Game_Variables.new
  11.     $game_self_switches = Game_SelfSwitches.new
  12.     $game_actors        = Game_Actors.new
  13.     $game_party         = Game_Party.new
  14.     $game_troop         = Game_Troop.new
  15.     $game_map           = Game_Map.new
  16.     $game_player        = Game_Player.new
  17.     $game_eventVar      = Game_EventVariables.new
  18.   end


SceneManager里
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 运行
  3.   #--------------------------------------------------------------------------
  4.   def self.run
  5.     DataManager.init
  6.     EventBookDef.init
  7.     Audio.setup_midi if use_midi?
  8.     @scene = first_scene_class.new
  9.     @scene.main while @scene
  10.   end


Window_MenuCommand里
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 独自添加指令用
  3.   #--------------------------------------------------------------------------
  4.   def add_original_commands
  5.   add_command(EventBookDef::Menu, :eventBook)
  6.   end


Scene_Menu里
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 生成指令窗口
  3.   #--------------------------------------------------------------------------
  4.   def create_command_window
  5.     @command_window = Window_MenuCommand.new
  6.     @command_window.set_handler(:item,      method(:command_item))
  7.     @command_window.set_handler(:skill,     method(:command_personal))
  8.     @command_window.set_handler(:equip,     method(:command_personal))
  9.     @command_window.set_handler(:status,    method(:command_personal))
  10.     @command_window.set_handler(:formation, method(:command_formation))
  11.     @command_window.set_handler(:save,      method(:command_save))
  12.     @command_window.set_handler(:game_end,  method(:command_game_end))
  13.     @command_window.set_handler(:cancel,    method(:return_scene))
  14.     @command_window.set_handler(:eventBook, method(:command_openBook))
  15.   end
  16.  
  17. # 事件薄
  18.   def command_openBook
  19.       SceneManager.call(Scene_EventBook)
  20.   end


未使用任何自定义脚本可使用此文件直接替代工程下Data文件里的对应文件
Scripts.rar (149.74 KB, 下载次数: 71)

工程中的调用



资源: Garphics.rar (29.56 KB, 下载次数: 60)
拷贝到工程目录就行,无需导入

线索详细内容的编辑在这里

第一个参数为章节名,第二个参数为案件名,第三个参数为线索名,第四个参数为详细内容
详细内容支持自动换行
编辑详细内容时不需要像编辑对话框内容那么辛苦,还要去注意输入回车换行,直接在txt里一行键入所有内容,然后拷贝到这里就可以了

无奈的吐槽:
第一次写RM脚本,还是RUBY的,在处理bug上花了好大的心思,最后终于发现用控制台,加上p 和 msgbox终于能快速的debug了.然后对语法的不熟悉也消耗了大量的时间...代码中用到的枚举很少..有很多难看的数字硬代码,这都是没有理解Ruby的Symbol导致的.后来也不想去改了.本来还想做一个游戏内编辑案件内容的功能和案件线索的总结功能的,无奈还要开发公司的2d骨骼动画编辑器..只有作罢了.之后最多可能就是把按键的声音修改成可配置的

示例工程:
http://pan.baidu.com/share/link?shareid=398891&uk=2956369506
带横版战斗的示例工程:
http://pan.baidu.com/share/link?shareid=398888&uk=2956369506

173939xjee55byjq0201qs.jpg (107.14 KB, 下载次数: 18)

详细信息界面

详细信息界面

180906h9b0rd50555t05z6.jpg (9.92 KB, 下载次数: 17)

脚本调用

脚本调用

181841fzmlj09sx4r5j5xh.jpg (50.4 KB, 下载次数: 16)

编辑修改

编辑修改

点评

⊙_⊙ 不错啊  发表于 2013-8-25 09:30
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
9 小时
注册时间
2007-2-23
帖子
26
3
 楼主| 发表于 2013-4-13 20:22:24 | 只看该作者
只能传999kb的文件?示例工程怎么上传呢?都大于999kb
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
133 小时
注册时间
2012-8-23
帖子
126
4
发表于 2013-4-13 20:42:29 | 只看该作者
rrobin 发表于 2013-4-13 20:22
只能传999kb的文件?示例工程怎么上传呢?都大于999kb

有几种网盘可以选择:
百度网盘、华为网盘、360网盘等等,建议使用百度网盘。
先注册一个帐号,然后把你的游戏打包(是整个游戏文件夹),即弄成压缩文件,电脑自己有这个功能,然后在网盘里找到上传。
上传后就可以在网盘文件夹里看到你的压缩包,然后找到分享这个按钮,这时会网盘给你一个分享的链接,复制这个链接贴到你的发布贴里就OK了。这样别人点开链接就能下载。

建议用百度网盘,界面简洁没广告,上传无限制且永久有效。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
9 小时
注册时间
2007-2-23
帖子
26
5
 楼主| 发表于 2013-4-13 21:03:08 | 只看该作者
1396 发表于 2013-4-13 20:42
有几种网盘可以选择:
百度网盘、华为网盘、360网盘等等,建议使用百度网盘。
先注册一个帐号,然后把你 ...

多谢指教,已经成功上传示例工程链接
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 18:30

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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