Project1
标题: 【教程】手把手教你制作个能按左右键翻页的简易书本脚本 [打印本页]
作者: alexncf125 时间: 2022-6-17 23:44
标题: 【教程】手把手教你制作个能按左右键翻页的简易书本脚本
本帖最后由 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学习交流群
作者: 哇哇哇啊叭叭 时间: 2022-6-19 07:54
火钳刘明。嗯...突然发现已经很久没见过这句话了
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |