Ren'Py教學【第八篇 #08】 完整的 GUI 從頭到尾製作 【下】 - Space of NingNing

Ren'Py教學【第八篇 #08】 完整的 GUI 從頭到尾製作 【下】

最近開始了在 Youtube 上上傳教學影片歡迎訂閱我的頻道~  

◆YT 連結◆

在 這 篇 我 會 繼 續 完 成 Help Screen 的 製 作

    要 先 看 看 上 篇 可 以 點 這 裡

    如 果 已 經 有 了 Keyboard 和 Mouse 的 位 置 那 就 可 以 開 始 定 位 下 面 help 文 字 的 位 置

    首 先 要 在 screen keyboard_help(): / screen mouse_help(): 和 screen gamepad_help(): 下 面

    加上    vbox:

                spacing # ( 一 格 之 間 的 距 離 - 範 例 15)

                xpos # ( 從 螢 幕 左 邊 到 文 字 的 距 離 - 範 例 500)

                ypos # ( 從 螢 幕 上 面 到 文 字 的 距 離 - 範 例 300)

                xmaximum # ( 文 字 最 長 可 以 到 達 的 距 離 - 範 例 1200)

                ymaximum # ( 文 字 離 最 上 面 可 以 到 達 的 距 離 - 範 例 700)

    ( 如 果 是 1280 x 720 的 畫 面 的 話 )

    都 調 好 的 話 大 概 看 起 來 會 像 這 樣 :

    定位 hotspot
    定位 hotspot

    右 邊 的 文 字 ( Keyboard 和 Mouse 下 面 / Enter 或 Space 後 面 / 右 邊,)可 以 透 過 更 換 gui.rpy 裡 的 gui.interface_text_color 後 面 的 顏 色 代 碼 來 更 改 ( 我 用 了 #ffffff 所 以 右 邊 的 文 字 是 白 色 的 )


    要 改 變 Keyboard 和 Mouse 按 鍵 的 Idle / hover/selected 顏 色 的 話 是 要 更 改 gui.rpy 裡 的 代 碼
    # Keyboard 和 Mouse 沒 有 被 選 擇 時 普 通 的 文 字 顏 色 #c2bebe 是 淡 淡 的 白 色 / 灰 色
    define gui.button_text_idle_color = "#c2bebe"  
    # 把 滑 鼠 滑 到 Keyboard 和 Mouse 文 字 上 時 顯 示 的 顏 色 #171717 是 像 黑 色 那 樣
    define gui.button_text_hover_color = "#171717"
    # 選 擇 Keyboard 或 Mouse 後 文 字 顯 示 的 顏 色 #ffffff 是 白 色 搭
    define gui.button_text_selected_color = "#ffffff"

    如 果 跟 我 用 了 同 樣 的 顏 色 的 話 看 起 來 就 會 像 這 樣 - 預 覽 
    醬 子 Help Screen 就 完 成 拉

    Step 4 - Load / Save Screen

    在 load 或 是 save Screen 我 會 用 一 樣 的 圖 片
    需 要 一 張 Idle / 一 張 hover/ 一 張 selected/ 一 張 selected hover 的 圖 片

    這 是 我 剛 做 好 的 screen
    load 或 是 save 畫 面 大 概 可 以 看 起 來 像 這 樣
    save / load 畫面
    save / load 畫面

    中 間 黑 色 的 框 框是 slot ( 裝 圖 片 / 存 檔 / 讀 檔 用 的)
    下 面 的 數 字 ( 1 到 8 ) 是 不 同 的 頁 數 所 以 8 x 4 = 32 所 以 玩 家 總 共 最 多 可 以 存 / 讀 取 32 個 檔 

    有 了 圖 片 後 接 下 來 就 是 代 碼拉
    打 開 screen.rpy 找 到 save 和 load screen 的 位 置 就 可 以 開 始 拉
    把 這 2 個 screen 下 面 的 東 東 全 部 刪 掉 然 後
    在 screen save(): 和 screen load(): 下 面 打 上

        tag menu
        imagemap:
            ground '圖 片 位 置 '
            idle '圖 片 位 置'
            hover '圖 片 位 置'
            selected_idle '圖 片 位 置'
            selected_hover '圖 片 位 置'
    因 為 load 和 save 使用的是同樣的圖片所以可以直接複製上面那一段然後貼上到另 一 個 screen
    都 放 好 正 確 的 圖 片 位 置 後 就 可 以 重 開 測 試 這 個 Project 拉
    只 是 這 時 還 沒 不 能 使 用 - 因 為 還 沒 定 義 有 按 鍵 的 位 置 ( 先 測 試 看 看 是 為 了 確 認 圖 片 的 位 置 都 是 正 確 的 )

    如 果 沒 有 跳 出 甚 麼 問 題 的 話 就 可 以 在 imagemap 下 面 放 上 正 確 的 hotspot
    ( 最 下 面 ) - 這 個 部 分

    放上正確的 hotspot
    放上正確的 hotspot

    在 About 和 Help 都使用過所以可以直接從那邊複製過來


    讀 / 存 檔 的 位 置 可 以 透 過 下 面 的 代 碼 呈 現        
    hotspot ( 正 確 的 hotspot 位 置 ) action FileAction(1):
                use load_save_slot(number=1)

    讀檔 / 存檔位置
    讀檔 / 存檔位置

    頁 碼 ( 1 到 8 ) 則 可 以 透 過 下 面 的 代 碼 呈 現
         -    hotspot ( 正 確 的 hotspot 位 置 ) action FilePage( 1 - 8 的 頁 碼 ) 
    第 一 頁 的 話 就 是- hotspot ( 正 確 的 hotspot 位 置 ) action FilePage (1)
    第 二 頁 的 話 就 是- hotspot ( 正 確 的 hotspot 位 置 ) action FilePage (2)
    有 8 頁 所 以 會 有 8 行 這 樣 的 東 東

    都找好位置 / 寫好代碼後就需要開始寫 screen load_save_slot ( 也可以用其他名字 )

    screen load_save_slot:
        $ file_text = "% s\n  %s" % (FileTime(number, empty=" "), FileSaveName(number))
        add FileScreenshot(number) xpos 截 圖 的 X 軸 位 置 ypos 截圖的 Y 軸 位置
        text file_text xpos 文 字 的 X 軸 位 置 ypos 文 字 的 Y 軸 位 置 size 文 字 的 大 小  color "# 文 字 的 顏 色"


    之 後 還 會 需 要 這 段 代 碼:
    init python:
        config.thumbnail_width = # 截 圖 的 寬 度
        config.thumbnail_height = # 截 圖 的 長 度
    如 果 沒 有 任 何 錯 誤 的 話 看 起 來 就 會 像 這 樣 - 預 覽 

    接 下 來 就 需 要 在 load 和 save 畫 面 上 加 上 load 和 save 的 字 樣 這 樣 玩 家 就 能 確 定 現 在 是 在 哪 個 screen 了

    要 加 文 字 / 句 子 在 screen 裡,可 以 使 用 下 面 這 個 代 碼

            text _("Load Data") xpos 文 字 的 X 軸 位 置 ypos  文 字 的 Y 軸 位 置 
    更 改 ("這裡 ") 的 文 字 就 可 以 改 變 實 際 在 遊 戲 裡 呈 現 的 字 了
    所 以 save 畫 面 的 代 碼 就 是 - text _("Save Data") xpos 文 字 的 X 軸 位置 ypos  文 字 的 Y 軸 位 置 

    改 變 字 體 的 顏 色 - {color=#顏 色 代 碼} 文 字 {/color}
    改 變 字 體 的 大 小 - {size= 字 體 大 小(像是 20,12,32...)} 文 字 {/size}
    畫 線 - {u} 文 字 {/u}

    範 例:
            text _("{u}{size=42}{b}Save Data{/b}{/size}{/u}") xpos 500 ypos 8

    文字可以來就會像這樣:

    顯示文字
    顯示文字


    如 果 沒 有 任 何 問 題 看 起 來 就 會 像 這 樣 - 預 覽

    這 樣 save 和 load screen 就 完 成 了
    剩 下 需 要 的 就 是 遊 戲 裡 平 常 / 大 部 分 玩 家 看 著 的 畫 面 了

    Step 5 - 對 話 框 & 名 字 框

    通 常 我 會 把 對 話 的 框 框 和 放 名 字 的 框 框 一 起 編 輯 
    範 例 - 對 話 框 :

    製作對話框 & 名字框
    製作對話框 & 名字框

    因 為 覺 得 有 點 單 調 所 以 加 了 個 花 在 名 字 框 框 後 面 但 也 可 以 甚 麼 都 不 加 或 是 加 一 盞 燈
    製作對話框
    製作對話框

    對 話 / 姓 名 框 框 做 好 之 後 就 可 以 把 他 們 匯 出 ,放 進 renpy 的文 件 夾 裡 了 ( 可 以 把 圖 片 取 名 為 textbox ,這 樣 就 可 以 直 接 取 代 原 本 的 對 話 框 了 )

    放 進 去 後 看 起 來 就 會 像 這 樣 :

    預覽對話框
    預覽對話框


    現 在 要 重 新 定 位 文 字 / 名 字 出 現 的 位 置 - 打 開 gui.rpy

    改 變 名 字 的 位 置 :
    define gui.name_xpos = 名 字 出 現 的 X 軸
    define gui.name_ypos = 名 字 出 現 的 Y 軸 - 因 為 我 要 讓 名 字 更 上 去 一 點 所 以 數 字 是 負 的 ( -10 )
    如 果 要 讓 名 字 下 去 一 點 數 字 就 要 是 正 的 ( 像 是 10 )
    改 變 文 字 的 位 置:
    define gui.dialogue_xpos = 文 字 出 現 的 X 軸
    define gui.dialogue_ypos = 文 字 出 現 的 Y 軸

    也 可 以 到 screen.rpy 上 更 改,只 要 找 到 screen say 之 後 在 style window / style namebox: 

    - 在 這 裡
    改變造型
    改變造型
    改 變 xpos 和 ypos 後 的 數 字 - 我 調 完 後 的 樣 子:

    改變文字造型
    改變文字造型


    位 置 都 正 確 後 就 需 要 正 確 的 大 小 ,顏 色 和 文 字 能 出 現 的 範 圍
    下 面 的 代 碼 都 是 在 gui.rpy 裡 面

    define gui.text_size = 一 個 數 字 - 可 以 更 改 文 字 的 大 小
    define gui.name_text_size = 一 個 數 字 - 可 以 更 改 角 色 名 字 的 大 小

    define gui.dialogue_width = 文 字 最 遠 可 以 到 達 的 位 置 ( 我 的 話 是 950 (( 我 使 用 了 1280 x 720 的 畫 面)


    要 改 變 名 字 的 顏 色 ,可 以 打 開 script.rpy 然 後 在 角 色 的 名 字 後 面 加 上 color="#顏 色 代 碼"
    像 是 這 樣 - define e = Character("Eileen", color="#000000")
    這 樣 的 話 Eileen 這 個 名 字 就 會 變 成 黑 色 的

    要 改 變 文 字 的 顏 色 - 也 是 要 更 改 script.rpy 裡 的 代 碼 
    在 style say_dialogue: 下 面 加 上 color "顏 色 代 碼" 就 可 以 了
    在 這 裡:

    改變文字顏色
    改變文字顏色

    都 改 完 後 看 起 來 就 會 像 這 樣:

    改變文字顏色 - 範例
    改變文字顏色 - 範例

    現 在 只 要 在 改 一 個 小 地 方 就 好 - 就 是 字 型 (( 總 覺 得 這 個 字 型 不 太 適 合 這 個 GUI 

    字 型 要 在 gui.rpy 裡 面 更 改 - 原 始 的 代 碼 應 該 要 長 這 樣 :
    ## The font used for in-game text.
    define gui.text_font = "DejaVuSans.ttf"

    ## The font used for character names.
    define gui.name_text_font = "DejaVuSans.ttf"

    ## The font used for out-of-game text.
    define gui.interface_text_font = "DejaVuSans.ttf"
    把 = 後 的 文 字 改 掉 就 可 以 了 但 是 在 改 之 前 要 先 把 要 用 到 的 字 型 放 到 renpy Project 文 件 夾 裡

    改 完 後 對 話 框 框 的 部 分 就 結 束 拉 - 對 話 框 框 預 覽

    Step 6 - 選像 (Choice Button)

    基 本 上 只 需 要 準 備 好 Idle 和 hover 的 圖 片 然 後 用 做 好 的 圖 片 取 代 原 本 的 Idle 和 hover 的 圖 片 就 行
    - 這 2 個 ( 都在gui / button裡面 )
    1. choice_idle_background
    2. choice_hover_background
    這 是 我 的 button 的 idle 和 hover 圖
    自製選相框
    自製選相框

    替 代 原 本 的 圖 片 後 ,看 起 來 會 像 這 樣 :
    選像框 - 範例
    選像框 - 範例

    也 可 以 把 選 項 改 成 圓 形 的 像 這 樣
    圓形選像框
    圓形選像框

    改 成 圓 形 的 話 就 要 改 變 一 些 代 碼
    修改代碼
    修改代碼

    根 據 圖 片 的 大 小 和 希 望 字 體 的 顏 色 都 可 以 在 上 面 這 串 代 碼 上 更 改 ( 在 gui.rpy 裡 )
    (( 因 為 基 本 上 都 是 重 複 的 東 西 所 以 我 就 放 個 圖 圖 在 這 裡 ,有 不 懂 的 地 方 可 以 看 上 面 的 教 學 或 留 言

    要 改 變 圖 片 出 現 的 位 置 則 要 換 到 screen.rpy
    在 screen choice ( items ) 下 面 可 以 找 到 style choice_vbox is vbox 如 果 要 讓 圓 形 橫 著 並 排( 左 右 ) 而 不 是 直 的 並 排 ( 上 下 ) 的 話 可 以 把 vbox 改 成 hbox ,如 果 對 上 下 並 排 很 滿 意 的 話 就 不 需 要 更 改 這 裡 的 代 碼
    - style choice_vbox is hbox - 上 下 並 排
    - style choice_vbox is hbox - 左 右 並 排

    下 面 可 以 找 到 這 一 串 代 碼
    style choice_vbox:
        xalign 0.5 ( 讓 圖 圖 出 現 在 中 間 - 可 以 配 合 圖 片 做 更 改 )
        ypos 450 ( 也 是 讓 圖 圖 出 現 在 中 間 - 可 以 配 合 圖 片 做 更 改 )

      spacing gui.choice_spacing ( 可 以 更 改 圖 片 選 項 之 間 的 間 隔 )
    - gui.choice_spacing 是在 gui.rpy 裡 窩 - 這 段 define gui.choice_spacing = 選 項 之 間 的 間 隔

    然 後 我 的 圓 圓 選 項 看 起 來 是 這 樣 的 :
    自定義選像框
    自定義選像框

    Step 7 - Quick_menu

    就 是 文 字 框 框 下 面 的 那 排 字 要 調 整 他 要 先 找 到 screen.rpy 裡 的 screen quick_menu():
    像 這 樣 子 :
    快速選單
    快速選單


    可 以 使 用 imagemap 或 是 imagebutton 我 的 話 現 在 會 使 用 imagebutton 來 做 quick menu ( 因 為 imagemap 的 作 法 在 上 面 其 他 step 裡 已 經 有 了 所 以 這 裡 就 不 一 直 重 複 寫 寫 拉 )

    首 先 要 先 為 所 有 button 準 備 圖 圖,需 要 一 張idle / 一 張hover / 一 張 selected / 一 張 selected hover ( 不 一 定 需 要 selected hover 的 圖 圖 其 實 就 是 看 人 我 是 會 特 別 在 準 備 一 張 但 其 實 也 可 以 跟 普 通 的 hover 用 一 樣 的 圖 片 )

    我 的 話 會 放 - 回 到 上 一 段 對 話 ( back ), 讀 取,存 取,對 話,跳 過 ,自 動 ,回 到 封 面 和 設 定 - 到 quick menu 裡 面 , 所 以 總 共 有 32 張 圖 圖
    快速選單 - 按鈕
    快速選單 - 按鈕

    圖 片 準 備 好 後 就 可 以 開 始 寫 代 碼 拉
         imagebutton auto "圖片的地址_%s.png" action  一 個 動 作 xpos 數 字 ypos 數 字

    - imagebutton - 讓 renpy 知 道 這 是 一 個 圖 片 按 鈕
    - auto renpy 會 自 動 偵 測 哪 張 圖 片 是 idle / hover 之 類 的,所 以 使 用 auto 時 記 得 名 字 一 定 要 取 對 窩
    - 圖 片 的 位 置 就 是 存 了 這 張 圖 的 地 方 像是: gui/button/圖 片 名 字_%s.圖 片 格 式 ( 像 是 png 或 jpg )
    - 圖 片 .png 或 是 .jpg 前 面 一 定 要 有 %s,如 果 圖 片 命 名 不 是 用 _而 是 單 純 一 個 空 白 鍵 那 這 段 代 碼 就 要 長 這 樣 : imagebutton auto "圖 片 名 字  (- 這 裡 有 個 空 白 鍵 )%s.png" action 
    - action 後 面 要 接 一 個 指 令 像 是 Rollback() (( 返 回 上 一 句
    - xpos 和 ypos 是 用 來 定 位 圖 片 的 位 置 的

    - 所 以 一 個 Imagebutton 的 代 碼 看 起 來 就 會 像 這 樣 : 
    imagebutton auto "gui/back_%s.png" action Rollback() ypos 500 xpos 400 - 返 回

    其 他 常 用 的 action 的 指 令:
    action ShowMenu('load') - 進 入 讀 取 畫 面
    action ShowMenu('save') - 進 入 存 取 畫 面
    action ShowMenu('history') - 進 入 曾 經 的 對 話 畫 面
    action Skip() alternate Skip(fast=True, confirm=True) - 跳 過 劇 情
    action Preference("auto-forward", "toggle") - 自 動
    action ShowMenu('main_menu') - 回 到 封 面 
    action ShowMenu('preferences') - 進 入 設 定 畫 面

    關 於 imagebutton 也 可 以 看 看 官 方 的 文 檔 窩

    如 果 沒 出 任 何 錯 誤 畫 面 看 起 來 就 會 像 這 樣 - 預 覽
    然 後 我 剛 剛 突 然 注 意 到 還 沒 弄 history的 screen 所 以 恩 ... 這 篇 太 長 拉 我 會 把 history screen 的 教 學 放 到 下 一 篇

    ----------------- 分 隔 線  -----------------

    在 離 開 之 前 如 果 可 以 的 話 幫 我 拍 個 手 吧 ~!


    Next Post Previous Post
    No Comment
    Add Comment
    comment url