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
    You are seeing this message because ad or script blocking software is interfering with this page.
    Disable any ad or script blocking software, then reload this page.