23 กรกฎาคม 2562

Ren'Py พื้นฐาน | บทที่ 3 กล่องข้อความ

กล่องข้อความคือส่วนสำคัญในเกมแนว Visual Novel เนื่องจากเป็นส่วนที่แสดงคำพูดของตัวละคร โปรแกรมเกมเอนจิน Ren'Py มีลูกเล่นเกี่ยวกับกล่องข้อความมากมาย นักสร้างเกมสามารถสร้างกล่องข้อความสวย ๆ ได้อย่างง่ายดาย สำหรับผู้อ่านที่ต้องการใช้ภาษาไทยในโปรแกรม Ren'Py ให้ท่านเปลี่ยนฟอนต์ก่อนทดสอบเกม อ่านเพิ่มเติมได้ในหัวข้อ "เปลี่ยนฟอนต์ ขนาด และสีตัวอักษร (ทั้งเกม)"
กล่องข้อความในเกมที่สร้างด้วยโปรแกรม Ren'Py แบ่งเป็น 3 ส่วนดังรูปที่ 3.1 ได้แก่
  • ส่วนที่ 1 ชื่อตัวละคร
  • ส่วนที่ 2 ข้อความหรือคำพูดตัวละคร
  • ส่วนที่ 3 พื้นหลังกล่องข้อความ
รูปที่ 3.1 กล่องข้อความในเกมที่สร้างด้วยโปรแกรม Ren'Py

คำสั่งที่แสดงข้อความในกล่องข้อความมี 2 รูปแบบ รูปแบบแรกมีสองส่วนคือส่วนชื่อตัวละครและส่วนคำพูดตัวละคร แต่ละส่วนอยู่ภายในเครื่องหมาย " " รูปแบบนี้เหมาะสำหรับคำพูดทั่วไป

รูปแบบที่สองมีเพียงส่วนเดียวคือส่วนคำพูดตัวละครที่อยู่ในเครื่องหมาย " " คำสั่งรูปแบบนี้จะแสดงเฉพาะคำพูดตัวละคร ไม่แสดงชื่อตัวละคร รูปแบบนี้เหมาะสำหรับประโยคที่ตัวละครคิดในใจ หรือข้อความแจ้งเตือนจากเกม


ตัวอย่างคำสั่งที่ใช้แสดงข้อความในรูปที่ 3.1 คือ



ประกาศตัวแปรเก็บชื่อตัวละคร

ก่อนเรียนเรื่องการใช้กล่องข้อความต่อ ผู้เขียนมีเทคนิคการใส่คำสั่งให้สั้นลง เกมแนว Visual Novel ต้องแสดงข้อความหรือคำพูดจำนวนมาก จึงต้องแสดงชื่อตัวละครเดิมซ้ำกันหลายครั้ง โปรแกรม Ren'Py มีเทคนิคที่จัดการกับชื่อตัวละคร แทนที่จะใส่ชื่อตัวละครเดิมซ้ำกันทุกครั้ง เราสามารถประกาศตัวแปรและใส่ชื่อตัวละครลงในตัวแปรแทนได้ในรูปแบบดังนี้

ตัวอย่างเช่น ประกาศตัวแปร a แล้วใส่ชื่อตัวละคร Aiya ลงในตัวแปร a คำสั่งแสดงข้อความไม่ต้องใส่เครื่องหมาย " " ในส่วนชื่อตัวละครที่เป็นตัวแปร (ถ้าส่วนชื่อตัวละครไม่ใช่ตัวแปรจะต้องใส่เครื่องหมาย " " ทุกครั้ง) เราสามารถแสดงข้อความดังรูปที่ 3.1 ด้วยเทคนิคตัวแปรดังนี้


จากตัวอย่างข้างบนจะเห็นว่าใช้ตัวอักษรเพียงตัวเดียวคือ a เพื่อแสดงชื่อตัวละคร Aiya ซึ่งมีสี่ตัวอักษร ความสะดวกนี้จะเห็นได้ชัดเจนขึ้นเมื่อตัวละครมีชื่อยาว เช่น เก็บชื่อตัวละคร Princess Sofia de Lupier ลงตัวแปรชื่อ s แล้วเรียกใช้ชื่อตัวละครผ่านตัวแปร s ทำให้ไม่ต้องพิมพ์ชื่อยาว ๆ ทุกครั้งที่ใส่คำสั่งแสดงข้อความ การประกาศตัวแปรให้ประกาศเพียงครั้งเดียวก่อนใช้ จากนั้นสามารถใช้ตัวแปรนั้นได้ตลอดทั้งเกมโดยไม่ต้องประกาศตัวแปรใหม่ ถ้ามีตัวแปรที่เก็บชื่อตัวละครหลายตัวแปร ตัวแปรแต่ละตัวต้องมีชื่อที่ไม่ซ้ำกัน


ตัวอักษรพิเศษ

ตัวอักษรพิเศษ (Escape Character) เป็นตัวอักษรที่ไม่สามารถแสดงในกล่องข้อความด้วยวิธีปกติได้ เช่น เครื่องหมาย " " หรือการขึ้นบรรทัดใหม่ เนื่องจากติดข้อจำกัดคำสั่งของโปรแกรม Ren'Py แต่โปรแกรม Ren'Py มีทางออกด้วยการใช้ตัวอักษรพิเศษแทนการใส่ตัวอักษรนั้นเข้าไปตรง ๆ ตัวอักษรพิเศษได้แก่
ตัวอักษรที่ต้องการตัวอักษรพิเศษตัวอย่าง
\\\
"Game was saved in C:\\Highstories Star\\game\\saves\\auto-1-LT1.save"
"\"a "My name is \"Aiya\"."
'\'"Rika" "You love me or \'Aiya\'?"
เว้นวรรคติดกัน\  (backslash + space)"Aiya" "JUMP \ JUMP \ JUMP"
ขึ้นบรรทัดใหม่\n
a "What are you doing?\nWhy you don't knock the door!"
[[["[[Aiya's underwear is very sexy.]"
{{{"{{This room is too hot. Is not there an air-conditioner?}"

การใช้ตัวอักษรพิเศษให้ใส่ในข้อความที่ต้องการ เช่น ใส่ตัวอักษรพิเศษ \" เพื่อแสดงเครื่องหมาย " ในกล่องข้อความ ส่วนเครื่องหมาย \ เป็นเพียงการบอกว่านี่เป็นตัวอักษรพิเศษ เครื่องหมาย \ จะไม่ถูกแสดงในกล่องข้อความ ถ้าผู้อ่านต้องการใช้ตัวอักษรในตารางข้างบน ท่านต้องใช้ตัวอักษรพิเศษเท่านั้น ไม่สามารถใส่ตัวอักษรที่ต้องการโดยตรงได้
รูปที่ 3.2 การใช้ตัวอักษรพิเศษ \n เพื่อขึ้นบรรทัดใหม่

โดยทั่วไปโปรแกรม Ren'Py จะมองเว้นวรรคที่อยู่ติดกันเป็นเว้นวรรคเดียว ถ้าต้องการเว้นวรรคหลายครั้ง ต้องนำหน้าเว้นวรรคด้วยเครื่องหมาย \ ต่อเว้นวรรคหนึ่งครั้ง เพื่อให้โปรแกรม Ren'Py มองแยกเป็นหลายเว้นวรรค การแสดงเครื่องหมาย [ และ { ให้ใส่เครื่องหมายนั้นสองตัวติดกันเป็น [[ และ {{ แต่เครื่องหมาย ] และ } สามารถใส่ได้โดยตรง ไม่ต้องใส่ซ้ำสองตัว


เปลี่ยนฟอนต์ ขนาด และสีตัวอักษร (ทั้งเกม)

คำสั่งเปลี่ยนฟอนต์ ขนาด และสีตัวอักษรในหัวข้อนี้อยู่ในไฟล์ gui.rpy (ไม่ใช่ไฟล์ script.rpy) เมื่อเปลี่ยนค่าในไฟล์ gui.rpy แล้วจะส่งผลตลอดทั้งเกม ถ้าผู้อ่านต้องการเปลี่ยนฟอนต์ ขนาด และสีตัวอักษรแบบใช้ครั้งเดียว ให้ท่านอ่านในหัวข้อ "ลูกเล่นที่น่าสนใจ"

เปลี่ยนฟอนต์ตัวอักษร

ฟอนต์เริ่มต้นของโปรแกรม Ren'Py คือฟอนต์ DejaVuSans.ttf ฟอนต์เริ่มต้นนี้ไม่รองรับภาษาไทย ถ้าผู้อ่านต้องการแสดงตัวอักษรภาษาไทยในเกม ท่านต้องเปลี่ยนฟอนต์เป็นฟอนต์ที่รองรับภาษาไทย คำสั่งเกี่ยวกับฟอนต์ที่อยู่ในไฟล์ gui.rpy มีรูปแบบดังต่อไปนี้
สำหรับฟอนต์คำพูดหรือข้อความ (ส่วนที่ 2 ในรูปที่ 3.1) คำสั่งมีรูปแบบดังนี้


สำหรับฟอนต์ชื่อตัวละคร (ส่วนที่ 1 ในรูปที่ 3.1) คำสั่งมีรูปแบบดังนี้


สำหรับฟอนต์ตัวอักษรอื่น ๆ เช่น ในหน้าเมนู คำสั่งมีรูปแบบดังนี้


สามารถใช้เครื่องมือ Edit > Find ในโปรแกรมประเภท Text Editor เพื่อช่วยหาคำสั่งนี้ได้ ต้องใส่นามสกุลของไฟล์ตามท้ายชื่อฟอนต์ (อย่าจำสับสนกับชื่อไฟล์รูปที่ไม่ต้องใส่นามสกุลไฟล์) และต้องมีฟอนต์นั้นต้องอยู่ในโฟลเดอร์โปรเจ็กต์เกม (ชื่อโปรเจ็กต์\game) ยกตัวอย่างว่าใช้ฟอนต์ THSarabunNew Bold.ttf ในทุกส่วนของเกม และมีไฟล์ฟอนต์ THSarabunNew Bold.ttf อยู่ในโฟลเดอร์โปรเจ็กต์เกมแล้ว ให้แก้ไขคำสั่งฟอนต์ในไฟล์สคริปต์ gui.rpy ดังนี้


เกมจะแสดงตัวอักษรที่มีฟอนต์ดังรูปที่ 3.3

ขนาดตัวอักษร

ตัวอักษรภาษาไทยมักมีตัวอักษรเล็กกว่าตัวอักษรละตินในขนาดที่เท่ากัน ถ้าเปลี่ยนฟอนต์โดยไม่เปลี่ยนขนาดตัวอักษร เกมจะแสดงตัวอักษรภาษาไทยเล็กมากจนอ่านลำบาก คำสั่งเปลี่ยนขนาดตัวอักษรที่อยู่ในไฟล์ gui.rpy มีหลายส่วน แต่ผู้เขียนยกมาเฉพาะคำสั่งส่วนที่สำคัญดังต่อไปนี้
สำหรับขนาดคำพูดหรือข้อความ (ส่วนที่ 2 ในรูปที่ 3.1) คำสั่งมีรูปแบบดังนี้


สำหรับขนาดชื่อตัวละคร (ส่วนที่ 1 ในรูปที่ 3.1) คำสั่งมีรูปแบบดังนี้


ยกตัวอย่างเช่น


เกมจะแสดงตัวอักษรที่มีขนาดดังรูปที่ 3.3
รูปที่ 3.3 เปลี่ยนฟอนต์ ขนาด และสีตัวอักษร พร้อมทดสอบข้อความภาษาไทย

สีตัวอักษร

คำสั่งเกี่ยวกับสีตัวอักษรที่อยู่ในไฟล์ gui.rpy มีหลายส่วน ผู้เขียนยกมาเฉพาะคำสั่งส่วนที่สำคัญดังต่อไปนี้
สำหรับขนาดคำพูดหรือข้อความ (ส่วนที่ 2 ในรูปที่ 3.1) คำสั่งมีรูปแบบดังนี้


สำหรับขนาดชื่อตัวละคร (ส่วนที่ 1 ในรูปที่ 3.1) คำสั่งมีรูปแบบดังนี้


รหัสสีต้องเป็นเลขฐานสิบหกของสี RGB หรือ RGBA และต้องมีเครื่องหมาย # นำหน้ารหัสสีด้วย ยกตัวอย่างเช่น


เกมจะแสดงตัวอักษรที่มีสีดังรูปที่ 3.3


ลูกเล่นที่น่าสนใจ

ลูกเล่นในหัวข้อนี้เป็นแท็กของกล่องข้อความ (Text Tag) ใส่คำสั่งเหล่านี้ในไฟล์สคริปต์ script.rpy ตามปกติ การใช้แท็กเหล่านี้จะใส่แทรกระหว่างคำพูดหรือข้อความเหมือนกับตัวอักษรพิเศษ ลูกเล่นสำหรับกล่องข้อความมีมากมาย ผู้เขียนยกมาเฉพาะลูกเล่นที่น่าสนใจดังต่อไปนี้
แท็ก
คำอธิบาย
ตัวอย่าง
{font=ชื่อฟอนต์} {/font}เปลี่ยนฟอนต์ตัวอักษร (ครั้งเดียว)cm "It is {font=Arial.tff}boring{/font} story."
{size=ขนาด} {/size}เปลี่ยนขนาดตัวอักษร (ครั้งเดียว)"You are so {size=60}CUTE{/size}."
{color=#รหัสสี} {/color}เปลี่ยนสีตัวอักษร (ครั้งเดียว)"แพรว" "{color=#ff0000}ระวัง!{/color} เดี๋ยวก็ถูกรถชนหรอก"
{b} {/b}ตัวอักษรหนา"แม่" "อย่าลืมซื้อ{b}ถั่วงอก{/b}มาด้วยนะลูก"
{i} {/i}ตัวอักษรเอียง"{i}EXPLOSION!!!!!!!{/i}"
{u} {/u}ตัวอักษรขีดเส้นใต้"ลืมซื้อ{u}ถั่วงอก{/u}เหรอเนี่ย!!!"
{cps=ตัวต่อวินาที} {/cps}เปลี่ยนความเร็วการแสดงตัวอักษร"ริกกะ" "{cps=20}แล้วจู่ ๆ{/cps} ผีก็โผล่ออกมา!"
{w}หยุดข้อความจนกว่าผู้เล่นจะคลิก"Timmy" "Wait...{w} What is that sound?"
{w=วินาที}หยุดข้อความตามเวลาที่กำหนดt "RUN!{w=1.0} I SAID \"RUN\"!!!"
{nw}ปิดข้อความทันทีเมื่อแสดงเสร็จ"การบ้านฉันยังไม่{nw}"

ตัวอย่างการใช้ลูกเล่นแท็ก และตัวอักษรพิเศษ " "

รูปที่ 3.4 ข้อความที่ใส่ลูกเล่นขีดเส้นใต้

ตัวอย่างการใช้ลูกเล่นแท็กหลายแท็กพร้อมกัน และใช้อักษรพิเศษเว้นวรรคสองครั้ง

รูปที่ 3.5 ข้อความที่ใส่ลูกเล่นขนาดและสีตัวอักษร


ข้อระวังท้ายบท

สคริปต์ในโปรแกรม Ren'Py ไม่อนุญาตให้ใช้ตัวอักษร Tab ในทุกกรณี โปรแกรมประเภท Text Editor บางโปรแกรมจะใส่ Tab นำหน้าคำสั่งโดยอัตโนมัติเมื่อขึ้นบรรทัดใหม่ (เช่น โปรแกรม Notepad++ ที่ผู้เขียนใช้) เราต้องลบ Tab ทิ้งทั้งหมด ถ้ามี Tab อยู่ในไฟล์สคริปต์ ตอนทดสอบเกมโปรแกรม Ren'Py จะแสดง Error ออกมา แม้ว่าเราจะไม่สามารถใช้ Tab ในสคริปต์ได้ แต่สามารถใช้การเว้นวรรคหลายตัวแทนได้ การเว้นวรคหน้าบรรทัดคือการแบ่งบล็อก (Block) ซึ่งจะอธิบายในบทที่ 5
รูปที่ 3.6 ห้ามใช้ Tab ในไฟล์สคริปต์

ไม่มีความคิดเห็น:

แสดงความคิดเห็น