赞 | 153 |
VIP | 0 |
好人卡 | 0 |
积分 | 243 |
经验 | 0 |
最后登录 | 2024-4-29 |
在线时间 | 5052 小时 |
Lv5.捕梦者
- 梦石
- 0
- 星屑
- 24327
- 在线时间
- 5052 小时
- 注册时间
- 2016-3-8
- 帖子
- 1620
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 alexncf125 于 2022-6-18 05:48 编辑
首先,每一本书,最最最基本,有 一个书名 和 每一页的內容。为方便调用, 每一页会有个页数。
第一步,写个module, 其中1234和2468是每本书有显示內容的页数
module Book_System Books_Library = [] Books_Library[1] = {:book_title => "天下第一书", :page_content => []} Books_Library[1][:page_content][1] = "test1\r\ntest1\r\ntest1" Books_Library[1][:page_content][2] = "test2\r\ntest2\r\ntest2" Books_Library[1][:page_content][3] = "test3\r\ntest3\r\ntest3" Books_Library[1][:page_content][4] = "test4\r\ntest4\r\ntest4" Books_Library[2] = {:book_title => "天下第2书", :page_content => []} Books_Library[2][:page_content][2] = "test5\r\ntest5\r\ntest5" Books_Library[2][:page_content][4] = "test6\r\ntest6\r\ntest6" Books_Library[2][:page_content][6] = "test7\r\ntest7\r\ntest7" Books_Library[2][:page_content][8] = "test8\r\ntest8\r\ntest8" end
module Book_System
Books_Library = []
Books_Library[1] = {:book_title => "天下第一书", :page_content => []}
Books_Library[1][:page_content][1] = "test1\r\ntest1\r\ntest1"
Books_Library[1][:page_content][2] = "test2\r\ntest2\r\ntest2"
Books_Library[1][:page_content][3] = "test3\r\ntest3\r\ntest3"
Books_Library[1][:page_content][4] = "test4\r\ntest4\r\ntest4"
Books_Library[2] = {:book_title => "天下第2书", :page_content => []}
Books_Library[2][:page_content][2] = "test5\r\ntest5\r\ntest5"
Books_Library[2][:page_content][4] = "test6\r\ntest6\r\ntest6"
Books_Library[2][:page_content][6] = "test7\r\ntest7\r\ntest7"
Books_Library[2][:page_content][8] = "test8\r\ntest8\r\ntest8"
end
第二步, 复制一个Window_Help, 首先改一下窗口的类名字, 接着改默认行数成1, 最后改一下set_item的称呼 和 定义改成
book输入Books_Library[1]时
会返回Books_Library[1][:book_tltie]
即"天下第一书"
class Window_Book_Title < Window_Base def initialize(line_number = 1) super(0, 0, Graphics.width, fitting_height(line_number)) end def set_text(text) if text != @text @text = text refresh end end def clear set_text("") end def set_title(book) set_text(book ? book[:book_title] : "") end def refresh contents.clear draw_text_ex(4, 0, @text) end end
class Window_Book_Title < Window_Base
def initialize(line_number = 1)
super(0, 0, Graphics.width, fitting_height(line_number))
end
def set_text(text)
if text != @text
@text = text
refresh
end
end
def clear
set_text("")
end
def set_title(book)
set_text(book ? book[:book_title] : "")
end
def refresh
contents.clear
draw_text_ex(4, 0, @text)
end
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"
class Window_Book_Left < Window_Base def initialize(line_number = 12) super(0, 0, Graphics.width / 2, fitting_height(line_number)) end def set_text(text) if text != @text @text = text refresh end end def clear set_text("") end def set_content(book, index) set_text(book ? book[:page_content][index] : "") end def refresh contents.clear draw_text_ex(4, 0, @text) end end
class Window_Book_Left < Window_Base
def initialize(line_number = 12)
super(0, 0, Graphics.width / 2, fitting_height(line_number))
end
def set_text(text)
if text != @text
@text = text
refresh
end
end
def clear
set_text("")
end
def set_content(book, index)
set_text(book ? book[:page_content][index] : "")
end
def refresh
contents.clear
draw_text_ex(4, 0, @text)
end
end
第四步, 复制一个第三步建的窗口, 改一下窗口的类名字
class Window_Book_Right < Window_Base def initialize(line_number = 12) super(0, 0, Graphics.width / 2, fitting_height(line_number)) end def set_text(text) if text != @text @text = text refresh end end def clear set_text("") end def set_content(book, index) set_text(book ? book[:page_content][index] : "") end def refresh contents.clear draw_text_ex(4, 0, @text) end end
class Window_Book_Right < Window_Base
def initialize(line_number = 12)
super(0, 0, Graphics.width / 2, fitting_height(line_number))
end
def set_text(text)
if text != @text
@text = text
refresh
end
end
def clear
set_text("")
end
def set_content(book, index)
set_text(book ? book[:page_content][index] : "")
end
def refresh
contents.clear
draw_text_ex(4, 0, @text)
end
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行, 加上按下左右键时的调用
class Window_Book_Page < Window_Selectable def initialize(pages, line_number = 1) super(0, 0, Graphics.width, fitting_height(line_number)) @pages = pages refresh activate end def pages=(pages) return if @pages == pages @pages = pages refresh end def refresh contents.clear draw_text_ex(0, 0, @pages[0].to_s) draw_text_ex(500, 0, @pages[1].to_s) end def process_handling return unless open? && active return process_ok if ok_enabled? && Input.trigger?(:C) return process_cancel if cancel_enabled? && Input.trigger?(:B) return process_pagedown if handle?(:pagedown) && Input.trigger?(:R) return process_pageup if handle?(:pageup) && Input.trigger?(:L) return process_pagedown if handle?(:pagedown) && Input.trigger?(:RIGHT) return process_pageup if handle?(:pageup) && Input.trigger?(:LEFT) end end
class Window_Book_Page < Window_Selectable
def initialize(pages, line_number = 1)
super(0, 0, Graphics.width, fitting_height(line_number))
@pages = pages
refresh
activate
end
def pages=(pages)
return if @pages == pages
@pages = pages
refresh
end
def refresh
contents.clear
draw_text_ex(0, 0, @pages[0].to_s)
draw_text_ex(500, 0, @pages[1].to_s)
end
def process_handling
return unless open? && active
return process_ok if ok_enabled? && Input.trigger?(:C)
return process_cancel if cancel_enabled? && Input.trigger?(:B)
return process_pagedown if handle?(:pagedown) && Input.trigger?(:R)
return process_pageup if handle?(:pageup) && Input.trigger?(:L)
return process_pagedown if handle?(:pagedown) && Input.trigger?(:RIGHT)
return process_pageup if handle?(:pageup) && Input.trigger?(:LEFT)
end
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在翻页后刷新一下各窗口的內容
class Scene_Book < Scene_MenuBase include Book_System def prepare(book_id) @book_id = book_id @book = Book_System::Books_Library[book_id] @pages = [1, 2] end def start super create_title_window create_left_window create_right_window create_page_window end def create_title_window @title_window = Window_Book_Title.new @title_window.viewport = @viewport @title_window.x = 0 @title_window.y = 0 @title_window.set_title(@book) end def create_left_window @left_window = Window_Book_Left.new @left_window.viewport = @viewport @left_window.x = 0 @left_window.y = @title_window.height @left_window.set_content(@book, @pages[0]) end def create_right_window @right_window = Window_Book_Right.new @right_window.viewport = @viewport @right_window.x = @left_window.width @right_window.y = @title_window.height @right_window.set_content(@book, @pages[1]) end def create_page_window @page_window = Window_Book_Page.new(@pages) @page_window.viewport = @viewport @page_window.x = 0 @page_window.y = Graphics.height - @page_window.height @page_window.pages = @pages @page_window.set_handler(:pageup, method(:prev_page)) @page_window.set_handler(:pagedown, method(:next_page)) @page_window.set_handler(:cancel, method(:return_scene)) end def prev_page return @page_window.activate if @pages == [1, 2] new_pages = [] @pages.each {|index| new_pages.push(index - 2)} @pages = new_pages refresh end def next_page if @book.nil? || #<=修正打开了不存在的书本时, 出现按翻页键会报错的情況(范例没更新) @pages[1] == @book[:page_content].size || #<=修正书本为单数页数时, 出现不停按右键会无限翻页的情況(范例没更新) @pages == [@book[:page_content].size - 2, @book[:page_content].size - 1] return @page_window.activate end new_pages = [] @pages.each {|index| new_pages.push(index + 2)} @pages = new_pages refresh end def refresh @left_window.set_content(@book, @pages[0]) @right_window.set_content(@book, @pages[1]) @page_window.pages = @pages @page_window.activate end end
class Scene_Book < Scene_MenuBase
include Book_System
def prepare(book_id)
@book_id = book_id
@book = Book_System::Books_Library[book_id]
@pages = [1, 2]
end
def start
super
create_title_window
create_left_window
create_right_window
create_page_window
end
def create_title_window
@title_window = Window_Book_Title.new
@title_window.viewport = @viewport
@title_window.x = 0
@title_window.y = 0
@title_window.set_title(@book)
end
def create_left_window
@left_window = Window_Book_Left.new
@left_window.viewport = @viewport
@left_window.x = 0
@left_window.y = @title_window.height
@left_window.set_content(@book, @pages[0])
end
def create_right_window
@right_window = Window_Book_Right.new
@right_window.viewport = @viewport
@right_window.x = @left_window.width
@right_window.y = @title_window.height
@right_window.set_content(@book, @pages[1])
end
def create_page_window
@page_window = Window_Book_Page.new(@pages)
@page_window.viewport = @viewport
@page_window.x = 0
@page_window.y = Graphics.height - @page_window.height
@page_window.pages = @pages
@page_window.set_handler(:pageup, method(:prev_page))
@page_window.set_handler(:pagedown, method(:next_page))
@page_window.set_handler(:cancel, method(:return_scene))
end
def prev_page
return @page_window.activate if @pages == [1, 2]
new_pages = []
@pages.each {|index| new_pages.push(index - 2)}
@pages = new_pages
refresh
end
def next_page
if @book.nil? || #<=修正打开了不存在的书本时, 出现按翻页键会报错的情況(范例没更新)
@pages[1] == @book[:page_content].size || #<=修正书本为单数页数时, 出现不停按右键会无限翻页的情況(范例没更新)
@pages == [@book[:page_content].size - 2, @book[:page_content].size - 1]
return @page_window.activate
end
new_pages = []
@pages.each {|index| new_pages.push(index + 2)}
@pages = new_pages
refresh
end
def refresh
@left_window.set_content(@book, @pages[0])
@right_window.set_content(@book, @pages[1])
@page_window.pages = @pages
@page_window.activate
end
end
大功告成~~~
简易书本脚本.rar
(1.41 MB, 下载次数: 56)
调出书本界面~抄Game_Interpreter第1143-1144行
SceneManager.call(Scene_Book)
SceneManager.scene.prepare(书本id)
书本id就是第一步module的1或2
最后宣传一下咱签名有咱建的RM学习交流群 |
评分
-
查看全部评分
|