Renpy教學【第十篇 #10】 一起寫視覺小說吧 【上】 - Space of NingNing

Renpy教學【第十篇 #10】 一起寫視覺小說吧 【上】

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

◆YT 連結◆


這 篇 文 章 會 介 紹 到 Renpy 的 各種 基 本 功 能 , 就 是 基 本 上製 作 一 個 視 覺 小 說 會 用 的 東 東

    廢 話 不 多 說 就 直 接 開 始 囉
    (( 裡 面 的 功 能 詳 細 介 紹 可 以參 考 這 篇

    1. Step ( 事 前 準 備 )

    如 果 你 還沒 有 下 載 Renpy 你 可 以 點 這 裡 下 載 最 新 的 Renpy

    點 一 下Download Latest Version 就 會 開 始 下 載 囉
    有 了 Renpy 之 後 你 還 需 要 一 個 編 輯 器 來 編 輯 代 碼 們
    Renpy 推 薦 我 們 使 用 Atom 所 以 我 也 是 使 用 Atom 在 寫 代 碼 們 的
    如 果 你 還 沒 有 Atom 可 以 點 這 裡 下 載 他

    點 一 下 Download 就 可 以 囉

    之 後 呢 就 是 創 建 一 個 新 的 專 案

    如 果 要 創 建 中 文 的 專 案 的話 你 要 先 把 renp 的 語 言 改 成 中 文
    - Preference - Language - 找 到 Traditional Chinese 或 是 Simplified Chinese ( 繁 體 或 簡 體 字 )

    創 建 好 後 你 可 以 從  右 邊 的 一 排 字 發 現 script.rpy
    點 下 去 之 後 Atom 就 會 自 動 打 開 拉  ( 如 果 你 下 載 了 Atom 了 的 話 , 你 也 可 以 用 其 他 編 輯 器 )
    點 進 來 後 你 就 會 看 到 這 個 畫 面 ( 我 換 了 主 題 所 以 是 不 同 的 顏 色 , 一 般 來 說 是 黑 色的 ( ( 畫 面 )




    2. Step ( 定 義 角 色 們 )

    我 相 信 你 一 定 有 劇 情 了 吧 (?)
    所 以 呢 第 2 步 就 是 把 劇 情 裡 的 角 色 放 進 script 裡
    像這樣
    define 後 面 是 角 色 的 代 號
    Character 後 面 是 角 色 的 名 字  -  只 要 打 Nin 就 會 自 動 出 現 Ning Ning 拉
    color 後 面 的 是 顏 色 代 碼  
    在 這 個 專 案 裡 只 會 有 2 個 角 色 登 場 
    - define m = Character('Mika', color="#000000")
    - define l = Character('Lia', color="#9e3bad")

    定 義 完 角 色 後 就 給 他 們 一 張 角 色 圖 吧 
    先 把 要 使 用 的 立 繪 ( 圖 片 ) 拉 進 專 案 裡 的 某 個 文 件 夾 裡  ( 我 的 話 會 放 在 images/character 裡 )
    圖 片 都 放 進 來 後 就 可 以 在 腳 本 裡 ( script.rpy ) 定 義 圖 片 們 了 

    像 這 樣:
    - image lia = "images/character/lia.png"
    - image mika = "images/character/mika.png"

    之 後 只 要 打 出 lia 或 mika 就 會 顯 示 你 定 義 好 的 圖 片 拉
    像 這 樣 :
    畫 面 顯 示 出 來就  會 像  這 樣 :

    at 後 面 接 的 是 角 色 的 站 位 ( 圖 片 的 位 置 )
    我 用 了 topleft 因 為 我 的 圖 片 太 大 了 所 以 不 用 top ... 的 話 臉 就 沒 辦 法 入 鏡 拉  (( 其 實 是 可 以 調 整 圖 片 的 大 小 的 只 是 我 懶 hehe

    3. Step (背景)

    我 的 話 會 給 背 景 自 己 一 個 資 料 夾 ( 在 images 裡 )
    這 個 專 案 目 前 我 只 放 了 一 張 背 景 圖

    因 為 他 是 放 在 images/bg 裡 的 圖 圖 所 以 他 的 路 徑 是 "images/bg/park.jpg" 
    所 以 我 的 代 碼 長 這 樣 : image park = "images/bg/park.jpg"
    現 在 renpy 可 以 不 用 定 義 就 可 以 使 用 圖 片 了 但 我 還 是 會 先 定 義
    (( 之 後 如 果 要 大 範 圍 / 大 面 積 (?) 的 更 換 圖 片 就 會 比 較 方 便 了

    下 面 是 沒 有 事 先 定 義 圖 片 直 接 使 用 的 代 碼 :
    顯 示 出 來 的 畫 面 :

    所 以 如 果 你 的 專 案 不 是 很 大 / 圖 片 比 較 少 或 是 你 很 確 定 不 會 再 對 圖 片 做 更 改 的 話 其 實 也 沒  有 一 定 要 事 先 定 義 圖 片 的 必 要

    4. Step ( 對 話 )

    有 角 色 , 有 圖 片 後 接 下 來 就 是 一 些 對 話 拉 
    所 以 呢 下 面 是 我 希 望 呈 現 的 對 話 - 影 片 點 這 裡
    要 怎 麼 做 出 這 樣 的 對 話  - 

    4-1 讓 玩 家 輸 入 自 己 想 要 的 名 字

    首 先 一 開 始 需  要 一 個 畫 面 / label 來 詢 問 玩 家 , 他 們 希 望 使 用 的 名 字
    範 例 :
    label name:
    $ pn = renpy.input("請 輸 入 你 的 名 字 ~ ", length=10)

    $ player_name = pn.strip()
    if pn =="":
        " 請 給 角 色 一 個 棒 棒 的 名 字 "
        jump name


    label XX:  -  label 後 面 接 的 文 字 可 以 隨 意 替 換 但 注 意 要 跟 後 面 jump XX 是 一 樣 的
    $ XX = renpy.input("XXX", length=XX)
    $ XX - $ 後 面 的 單 字 可 以 隨 意 替 更 改 ,   後 面 的 字 是 用 來 當 作 角 色 代 號 的  ( 如 果 你 寫 main 之 後 只 要 在 句 子 前 打 出 main 就 會 自 動 換 成 玩 家 輸 入 的 名 字 了 
    " 請 輸 入 你 的 名 字 ~ " - 可 以 更 改 在 "" 裡 的 文 字 , 如 果 你 寫  " 請 在 這 裡 輸 入 你 的  名 字 吧  " 那 畫 面 就 會 變 成 這 樣


     length=10) - 你 可 以 更 換 後 面 的 數 字 或 是 直 接 刪 除 這 一 行 , 這 是 用 來 告 訴 renpy 玩 家 最 多 可 以 輸 入 幾 個 字 的 , 如 果 設 定 為 20 那 玩 家 就 不 能 輸 入 20 以 上 的 文 字 / 字 母 作 為 名 字 / 如 果 刪 除 這 一 行 那 玩 家 可 以 輸 入 的 文 字 / 字 母 就 沒 有 上 限 

    if pn =="": - 如 果 玩 家 甚 麼 都 不 打 直 接 繼 續 / 按 下 Enter
        " 請 給 角 色 一 個 棒 棒 的 名 字 "  - 那 就 會 顯 示 這 一 段 字 jump name 是 讓 畫 面 跳 回 label name 的 所 以 jump 後 面 的 文 字 必 須 和 一 開 始 label 的 文 字 一 樣
    這 樣 輸 入 名 字 的 部 分 就 完 成 拉

    4-2 設 定 好 感 系 統

    設 定 好 感 系 統 / 其 他 數 值 的 話 可 以 使 用 這 個 代 碼 :

    $數 值 名 稱 = 0

    $- 這 個 符 號 後 面 的 字 可 以 隨 便 換 , 你 可 以 叫 他 Affection ( 好 感 ) ,  Intelligent ( 智 力 ) ... 之 類 的
    注 意  ! $ 和 數 值 的 名 字 之 間 是 沒 有 空 格 的  (( 我 因 為 空 格 的 關 係 一 直 出 現 Error 弄 了 很 久 才 發 現 QQ
    範 例:
    $lia_aff = 0
    $mika_aff = 0
    上 面 這 2 行 是 我 在 這 個 專 案 裡 使 用 的 代 碼


    所 以 呢 從 Step 4-1 到 4-2 你 應 該 會 有 看 起 來 像 這 樣 的 代 碼  ( # 後 面 的 字 是 對 那 行 代 碼 的 解 釋 ) :

    #總 共 會 登 場 的 角 色
    define m = Character('Mika', color="#000000") # 白 髮 的 角 色
    define l = Character('Lia', color="#9e3bad") # 黑 髮 的 角 色
    define pn = Character("[player_name]", color="#88b2c2) # 主 角


    label start: 
    $lia_aff = 0 # Lia 對 玩 家 的 好 感
    $mika_aff = 0 # Mika 對 玩 家 的 好 感

    scene park # 背 景 圖 片 ( 公 園 )

    label name:  # 新 的 一 個 叫 做 name 的 label
    $ pn = renpy.input(" 請 在 這 裡 輸 入 你 的 名 字 吧", length=10) 

    $ player_name = pn.strip()
    if pn =="":
        "請 給 角 色 一 個 棒 棒 的 名 字"
        jump name

    show lia at topleft # 讓 lia 登 場 ((站 在 左 邊
    show mika at topright # 讓 mika 登 場 (( 站 在 右 邊


    m "你好, [player_name]!"  #打招呼並讓mika說出玩家的名字
    l "你好~ " #讓lia打招呼
    m "歡迎你的到來"
    m "要繼續往前的話請你回答一些問題"
    m "根據你的回答會決定你之後跟誰一起走~"
    pn "好的" #玩家的回覆

    4-3 設 定 選 項 ( 會 影 響 到 後 續 劇 情 的 選 項 )

    根 據 玩 家 的 選 擇 會 影 響 到 後 續 的 劇 情 
    ( 在 這 個 專 案 會 影 響 到 之 後 玩 家 要 跟 哪 個 角 色 一 起 走 )
    下 面 是 我 在 這 個 專 案 裡 使 用 的 代 碼

    m "問題1 - 你比較喜歡蘋果還是香蕉呢?" #mika提出的第1個問題
    menu: #讓renpy知道下面的代碼都屬於這個選項
        "蘋果": #玩家看到的選項1
            $ lia_aff += 1 #這個選項造成的影響 ((lia的好感加1
            jump q2 #如果玩家選了蘋果那就會跳到q2 (問題2
        "香蕉":#玩家看到的選項2
            $ mika_aff += 1 #這個選項造成的影響 ((mika的好感加1
            jump q2 #如果玩家選了香蕉那就也會跳到q2 (問題2 - 你也可以選擇讓玩家跳到其他label

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

    更多關於選項的東東你可以點這裡

    所以呢我在這個專案全部的選項的代碼看起來就像這樣:

    m "問題1 - 你比較喜歡蘋果還是香蕉呢?"
    menu:
        "蘋果":
            $ lia_aff += 1
            jump q2
        "香蕉":
            $ mika_aff += 1
            jump q2

    label q2:
    m "問題2 - 你比較喜歡黑色還是白色呢?"
    menu:
        "黑色":
            $ lia_aff += 1
            jump q3
        "白色":
            $ mika_aff += 1
            jump q3
    label q3:
    m "問題3 - 你比較喜歡電影還是連續劇?"
    menu:
        "電影":
            $ lia_aff += 1
            jump final
        "連續劇":
            $ mika_aff += 1
            jump final

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

    renpy 會 記 住 玩 家 的 選 項 並 記 得 選 項 造 成 的 影 響 , 當 玩  家 選 擇 了 最 後 的 問 題 ( 問 題 3 ) 的 選 項 後 就 會 跳 到 叫 做 final 的 label

    label final:
    if lia_aff >= mika_aff: #如果lia的好感比mika的好感大
        jump lia #那就跳到一個叫做lia的label
    else: #如果上面的if句子不成立 ((lia的好感比mika小
        jump mika  #那就跳到一個叫做mika的label

    最 後 就 是 建 立 1 個 叫 mika1 個 叫 lia 的 label 了
    下 面 是 我 在 這 個 專 案 裡 使 用 的 代 碼 / 對 話  :

    label lia:
        hide mika
        l "你好 "
        l "今天會由我帶你參觀這裡"
        return
    label mika:

    hide lia
    m "你好~"
    m "今天的旅程就由我來陪你吧 "
    return


    到 這 裡 就 完 成 拉
    -根 據 這 個 教 學 最 後 會 呈 現 出 來 的 畫 面 - 影 片 點 這 裡


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

    ​​◆ 喜歡這篇文章的話 — 留言或是為我拍手, 我都會很開心的!


    Next Post Previous Post
    4 Comments
    • 匿名
      匿名 9/18/2021 7:05 上午

      Step 4 的對話好像被剪掉了

      • NingNing
        NingNing 9/22/2021 8:58 下午

        要怎麼做出這樣的對話 - 後面接的4-1,4-2等就是Step4的後續囉

    • 匿名
      匿名 4/12/2022 9:12 下午

      感謝!

    • 匿名
      匿名 6/07/2022 5:00 上午

      感謝你的Ren'Py教學!

    Add Comment
    comment url