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

Project1

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

[原创发布] 【教程】手把手教你制作个能按左右键翻页的简易书本脚本

[复制链接]

Lv5.捕梦者

梦石
0
星屑
24327
在线时间
5052 小时
注册时间
2016-3-8
帖子
1620
跳转到指定楼层
1
发表于 2022-6-17 23:44:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 alexncf125 于 2022-6-18 05:48 编辑

首先,每一本书,最最最基本,有 一个书名 和 每一页的內容。为方便调用, 每一页会有个页数。

第一步,写个module, 其中1234和2468是每本书有显示內容的页数
RUBY 代码复制
  1. module Book_System
  2.  
  3.   Books_Library = []
  4.  
  5.   Books_Library[1] = {:book_title => "天下第一书", :page_content => []}
  6.   Books_Library[1][:page_content][1] = "test1\r\ntest1\r\ntest1"
  7.   Books_Library[1][:page_content][2] = "test2\r\ntest2\r\ntest2"
  8.   Books_Library[1][:page_content][3] = "test3\r\ntest3\r\ntest3"
  9.   Books_Library[1][:page_content][4] = "test4\r\ntest4\r\ntest4"
  10.  
  11.   Books_Library[2] = {:book_title => "天下第2书", :page_content => []}
  12.   Books_Library[2][:page_content][2] = "test5\r\ntest5\r\ntest5"
  13.   Books_Library[2][:page_content][4] = "test6\r\ntest6\r\ntest6"
  14.   Books_Library[2][:page_content][6] = "test7\r\ntest7\r\ntest7"
  15.   Books_Library[2][:page_content][8] = "test8\r\ntest8\r\ntest8"
  16.  
  17. end



第二步, 复制一个Window_Help, 首先改一下窗口的类名字, 接着改默认行数成1, 最后改一下set_item的称呼 和 定义改成
book输入Books_Library[1]时
会返回Books_Library[1][:book_tltie]
即"天下第一书"
RUBY 代码复制
  1. class Window_Book_Title < Window_Base
  2.  
  3.   def initialize(line_number = 1)
  4.     super(0, 0, Graphics.width, fitting_height(line_number))
  5.   end
  6.  
  7.   def set_text(text)
  8.     if text != @text
  9.       @text = text
  10.       refresh
  11.     end
  12.   end
  13.  
  14.   def clear
  15.     set_text("")
  16.   end
  17.  
  18.   def set_title(book)
  19.     set_text(book ? book[:book_title] : "")
  20.   end
  21.  
  22.   def refresh
  23.     contents.clear
  24.     draw_text_ex(4, 0, @text)
  25.   end
  26. end



第三步, 再复制一个Window_Help, 同样改一下窗口的类名字, 改默认行数成12, 窗口width除2, 改set_item的称呼 和 定义改成
book输入Books_Library[1]及
index输入3时
会返回Books_Library[1][:page_content][3]
即"test3\r\ntest3\r\ntest3"
RUBY 代码复制
  1. class Window_Book_Left < Window_Base
  2.  
  3.   def initialize(line_number = 12)
  4.     super(0, 0, Graphics.width / 2, fitting_height(line_number))
  5.   end
  6.  
  7.   def set_text(text)
  8.     if text != @text
  9.       @text = text
  10.       refresh
  11.     end
  12.   end
  13.  
  14.   def clear
  15.     set_text("")
  16.   end
  17.  
  18.   def set_content(book, index)
  19.     set_text(book ? book[:page_content][index] : "")
  20.   end
  21.  
  22.   def refresh
  23.     contents.clear
  24.     draw_text_ex(4, 0, @text)
  25.   end
  26. end




第四步, 复制一个第三步建的窗口, 改一下窗口的类名字
RUBY 代码复制
  1. class Window_Book_Right < Window_Base
  2.  
  3.   def initialize(line_number = 12)
  4.     super(0, 0, Graphics.width / 2, fitting_height(line_number))
  5.   end
  6.  
  7.   def set_text(text)
  8.     if text != @text
  9.       @text = text
  10.       refresh
  11.     end
  12.   end
  13.  
  14.   def clear
  15.     set_text("")
  16.   end
  17.  
  18.   def set_content(book, index)
  19.     set_text(book ? book[:page_content][index] : "")
  20.   end
  21.  
  22.   def refresh
  23.     contents.clear
  24.     draw_text_ex(4, 0, @text)
  25.   end
  26. end




第五步
复制一个Window_Status
也是先改一下窗口的类名字
再把Graphics.height学第一步的窗口改成fitting_height(line_number)
之后先复制一下第124行的draw_text_ex(x, y, @actor.description)
接着删掉第31-37行及第39-125行用不到的內容,
删好后, 在第30行contents.clear下方贴上两次刚复制的第124行, 再改一下两页页数的显示位置和描绘內容(数字),
将actor全改成pages, 最后去Window_Selectable抄一下第296-302行, 加上按下左右键时的调用
RUBY 代码复制
  1. class Window_Book_Page < Window_Selectable
  2.  
  3.   def initialize(pages, line_number = 1)
  4.     super(0, 0, Graphics.width, fitting_height(line_number))
  5.     @pages = pages
  6.     refresh
  7.     activate
  8.   end
  9.  
  10.   def pages=(pages)
  11.     return if @pages == pages
  12.     @pages = pages
  13.     refresh
  14.   end
  15.  
  16.   def refresh
  17.     contents.clear
  18.     draw_text_ex(0, 0, @pages[0].to_s)
  19.     draw_text_ex(500, 0, @pages[1].to_s)
  20.   end
  21.  
  22.   def process_handling
  23.     return unless open? && active
  24.     return process_ok       if ok_enabled?        && Input.trigger?(:C)
  25.     return process_cancel   if cancel_enabled?    && Input.trigger?(:B)
  26.     return process_pagedown if handle?(:pagedown) && Input.trigger?(:R)
  27.     return process_pageup   if handle?(:pageup)   && Input.trigger?(:L)
  28.     return process_pagedown if handle?(:pagedown) && Input.trigger?(:RIGHT)
  29.     return process_pageup   if handle?(:pageup)   && Input.trigger?(:LEFT)
  30.   end
  31.  
  32. end




最后一步, 也是本教程最复杂的一步, 就是写个Scene把上面4个窗口塞进去显示出来, 和加两段左右翻页的処理。
1. 不用多说, 先来个class Scene_Book < Scene_MenuBase end
2. 让第一步写的module能被调用, 加行include Book_System
3. 抄一下Scene_Shop的def prepare和def start和def create_xxxxx_window
4.在def create_page_window末加上那堆set_handler
5.最后加上两段左右翻页的処理
6.写段refresh在翻页后刷新一下各窗口的內容
RUBY 代码复制
  1. class Scene_Book < Scene_MenuBase
  2.  
  3.   include Book_System
  4.  
  5.   def prepare(book_id)
  6.     @book_id = book_id
  7.     @book = Book_System::Books_Library[book_id]
  8.     @pages = [1, 2]
  9.   end
  10.  
  11.   def start
  12.     super
  13.     create_title_window
  14.     create_left_window
  15.     create_right_window
  16.     create_page_window
  17.   end
  18.  
  19.   def create_title_window
  20.     @title_window = Window_Book_Title.new
  21.     @title_window.viewport = @viewport
  22.     @title_window.x = 0
  23.     @title_window.y = 0
  24.     @title_window.set_title(@book)
  25.   end
  26.  
  27.   def create_left_window
  28.     @left_window = Window_Book_Left.new
  29.     @left_window.viewport = @viewport
  30.     @left_window.x = 0
  31.     @left_window.y = @title_window.height
  32.     @left_window.set_content(@book, @pages[0])
  33.   end
  34.  
  35.   def create_right_window
  36.     @right_window = Window_Book_Right.new
  37.     @right_window.viewport = @viewport
  38.     @right_window.x = @left_window.width
  39.     @right_window.y = @title_window.height
  40.     @right_window.set_content(@book, @pages[1])
  41.   end
  42.  
  43.   def create_page_window
  44.     @page_window = Window_Book_Page.new(@pages)
  45.     @page_window.viewport = @viewport
  46.     @page_window.x = 0
  47.     @page_window.y = Graphics.height - @page_window.height
  48.     @page_window.pages = @pages
  49.     @page_window.set_handler(:pageup,    method(:prev_page))
  50.     @page_window.set_handler(:pagedown,   method(:next_page))
  51.     @page_window.set_handler(:cancel, method(:return_scene))
  52.   end
  53.  
  54.   def prev_page
  55.     return @page_window.activate if @pages == [1, 2]
  56.     new_pages = []
  57.     @pages.each {|index| new_pages.push(index - 2)}
  58.     @pages = new_pages
  59.     refresh
  60.   end
  61.  
  62.   def next_page
  63.     if @book.nil? || #<=修正打开了不存在的书本时, 出现按翻页键会报错的情況(范例没更新)
  64.     @pages[1] == @book[:page_content].size || #<=修正书本为单数页数时, 出现不停按右键会无限翻页的情況(范例没更新)
  65.     @pages == [@book[:page_content].size - 2, @book[:page_content].size - 1]
  66.       return @page_window.activate
  67.     end
  68.     new_pages = []
  69.     @pages.each {|index| new_pages.push(index + 2)}
  70.     @pages = new_pages
  71.     refresh
  72.   end
  73.  
  74.   def refresh
  75.     @left_window.set_content(@book, @pages[0])
  76.     @right_window.set_content(@book, @pages[1])
  77.     @page_window.pages = @pages
  78.     @page_window.activate
  79.   end
  80.  
  81. end




大功告成~~~ 简易书本脚本.rar (1.41 MB, 下载次数: 56)

调出书本界面~抄Game_Interpreter第1143-1144行
SceneManager.call(Scene_Book)
SceneManager.scene.prepare(书本id)
书本id就是第一步module的1或2




最后宣传一下咱签名有咱建的RM学习交流群

评分

参与人数 5星屑 +250 +4 收起 理由
YUKA_LE + 1 塞糖
KB.Driver + 1 精品文章
VIPArcher + 250 原创发布
哇哇哇啊叭叭 + 1 塞糖
百里_飞柳 + 1 精品文章

查看全部评分

Lv4.逐梦者

梦石
0
星屑
10673
在线时间
908 小时
注册时间
2019-11-5
帖子
2225

极短24参与

2
发表于 2022-6-19 07:54:27 | 只看该作者
火钳刘明。嗯...突然发现已经很久没见过这句话了
风继续吹,不忍远离。年少轻狂,眼神明亮,最好的年纪,最好的时光。希望岁月是一场春梦
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-30 08:32

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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