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
    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.