Renpy Programming คำสั่งเบื้องต้นในการเขียน ตอนที่ 2 ( python, Character)
posted on 26 Apr 2011 10:35 by vashiya in Programming, renpyเอาล่ะครับเพื่อความต่อเนื่องในการศึกษาผมก็จะรีบๆสอนต่อละกันครับสำหรับเนื้อหาในตอนที่ 2 ที่ผมจะหยิบยกขึ้นมานั้นก็จะเกี่ยวข้องกับเรื่อง
- การใช้ตัวแปรเบื้องต้น (python)
- กรอบคำพูด (Character)
เห็นว่าหัวข้อน้อยๆอย่างงี้ก็เห่อะยุ่งยากพอดูเลยล่ะ
การใช้ตัวแปรเบื้องต้น(Python)
python แปลตรงตัว หมายถึง งูใหญ่ , งูเหลือม , อนาคอนด้า ฯลฯ หรืออีกความหมายหนึ่งหมายถึง การสิงสู่ ,การเข้าสิง
python ตามความหมายของในที่นี้นั้นก็คือกำหนดเรียกใช้งานภาษา Python ครับซึ่งมันก็จะรวมไปถึงเรื่องที่เกี่ยวของกับตัวแปรด้วยครับ
ตัวแปรนั้นเปรียบเสมือนแฟ้มที่คอยทำหน้าที่เก็บข้อมูลต่างๆที่จำเป็นต่อการทำงานของโปรแกรมเอาไว้ โดยปกติแล้วเราจะนิยมประกาศค่าตัวแปรไว้ในส่วน init ครับ การประกาศค่าตัวแปรpythonใน Ren’py นั้นแบ่งการใช้งานได้ 2 ลักษณะคือ
1 .) ประกาศค่าบรรทัดเดียว การเรียกใช้งานก็แสนจะง่ายจนน่าตกใจครับ
“$” name “=” ค่าตัวแปร
ตัวอย่าง
$ e = 30
$ d = “hello”
ส่วนเวลาที่เราจะตั้งชื่อตัวแปรมันยังไงก็ได้นะครับขออย่างเดียวว่าอย่าไปตั้งซ้ำกับ keyword ของมันก็พอครับ
keyword ของภาษานี้มีดังนี้ครับ
http://www.renpy.org/wiki/renpy/doc/reference/The_Ren%27Py_Language#head-a34a0457ffbdae8847e5808b40f058ab85619167
2 .) แบบหลายบรรทัด การทำงานในรูปแบบนี้ค่อนข้างแปลกๆไปหน่อย คือเป็นการประกาศทีละหลายบรรทัดไปเลย มันจะเป็นตัวที่ทำหน้าที่ mark ให้โปรแกรมรู้ว่าตำแหน่งนี้เป็นส่วนของการประกาศ function หรือ ใช้ประกาศค่า array และการเรียกใช้งานเกี่ยวกับ UI Function การเรียกใช้งานก็แสนจะง่ายจนน่าตกใจกว่าอันแรกอีกครับ
“python :”
ตัวอย่าง
python :
e = 30
d = “hello”
q = true
ตัวแปรที่มีการประกาศอยู่ภายใต้คำสั่ง python ไม่ต้องใส่ “$” ที่หน้าตัวแปรนะครับ แล้วอย่าลืมล่นย่อหน้าเข้ามา 4 ครั้งด้วยนะครับ
ปล.อันที่จริงแล้วคำสั่งนี้เป็นคำสังที่ไว้สำหรับพิมพ์ code ภาษา python ลงไปใน renpy อ่ะนะซึ่งสามารถที่จะเขียนไว้ตรงไหนในส่วนของโปรแกรมก็ได้ เพียงแต่ว่าตอนนี้ผมขออธิบายเฉพาะในส่วนของการประกาศตัวแปรเท่านั้นก่อนละกัน เอาล่ะไหนๆก็พูดถึงเรื่องตัวแปรแล้วก็จะขอแถมตัวแปรอีกชนิดนึงก็แล้วกันนั่นก็คือ
Array เป็นตัวแปรที่มีคุณสมบัติในการเก็บค่าได้หลายค่าภายในตัวเดียวกัน เหมือนกับตู้ใส่แฟ้มเอกสาร
หลักการใช้งาน
$ name “=” “[” ค่าต่างๆ1 , ค่าต่างๆ2 , ... “]”
ตัวอย่าง
$ exam = [1,2,3,4,5,6]
หากเวลาเราต้องการเรียกใช้งานตัวแปร array ก็เพียงแค่ ประกาศตามนี้
$ name[ตัวเลข]
ตัวอย่าง
$ exam[0] ---> ค่าของตัวแปรตัวนี้ตือ 1
$ exam[1] ---> ค่าของตัวแปรตัวนี้ตือ 2
หากเราประกาศค่าภายใต้คำสั่ง python เราไม่ต้องใส่ $ ที่หน้าตัวแปรนะครับ
ตัวเลขในที่นี้หมายถึงลำดับช่องของอเรย์ที่เราต้องการ(เราสามารถใส่เป็นค่าตัวแปรแทนตัวเลขก็ได้นะครับถ้าหากว่าค่าตัวแปรเป็นชนิดตัวเลข int)
ต่อมาก็จะเป็นการนำค่าตัวแปรมาแสดงในเฟรมคำพูด
“ข้อความ %(ตัวแปร)s”
ตัวอย่าง
$ exam = [1,2,3,4,5,6]
$ first = exam[0]
$ name = “vashiya”
“สวัสดีคุณ %(name)s”
“ตัวเลขในตำแหน่งแรกของคุณคือ %(first)d”
ข้อสังเกต จากตัวอย่างข้างต้นเราจะเห็นว่าค่าตัวแปรภายในวงเล็นนั้นไม่จำเป็นต้องใส่ $
อีกทั้งเรายังไม่สามารถนำค่าตัวแปรที่เป็นชนิด Array มาใส่ลงในข้อความได้โดยตรง แต่เราต้องทำการฝากค่าผ่านตัวแปรตัวอื่นแล้วนำมาแสดงผลลงในข้อความอีกทีหนึ่งครับ (ในที่นี้ปมตั้งชื่อตัวแปรนั้นว่า first ครับ)
จะเห็นว่าเราจะต้องมี “%( )s” ครอบตัวแปรที่เราต้องการแสดงไว้เท่านี้เราก็สามารถแสดงค่าต่างๆออกมาได้แล้ว โดยที่ตัวอักษรข้างหลังวงเล็บนั้นจะเป็นตัวที่กำหนดว่าตัวแปรที่ต้องการแสดงออกมานั้นเป็นตัวแปรชนิดไหน
“%( )s” จะแสดงตัวแปรที่เป็นค่า string(ตัวอักษรต่างๆ)
“%( )d” จะแสดงตัวแปรที่เป็นค่า int (ค่าตัวเลขต่างๆ)
“%( )f” จะแสดงตัวแปรที่เป็นค่า ทศนิยม
ที่ยกมาคือตัวที่ใช้บ่อยที่สุดยังมีรูปแบบอื่นๆอีกลองหาดูละกัน http://www.python.org/doc/2.3.5/lib/typesseq-strings.html
หลังจากที่เราเกริ่นเกี่ยวกับการ output ค่ากันมาบ้างแล้ว ต่อไปเราจะมาพูดเกี่ยวกับการ input ค่ากันบ้างนะครับ
หากว่าเราต้องการใส่ตัวอักษรอะไรให้เกมส์เหมือนกับตอนที่เราป้อนชื่อตัวเราเองลงไปในตอนเริ่มเกมส์ทั่วไปน่ะแหล่ะครับ
มีการประกาศใช้งานดังนี้ครับ
$ ชื่อตัวแปร = renpy.input(‘ข้อความ’)
ตัวอย่าง
$ name = renpy.input(‘กรุณาพิมพ์ชื่อของคุณ’)
บรรทัดนี้จะเป็นการเก็บค่าจากที่เราพิมพ์ไปใส่ลงในตัวแปรที่เรากำหนดครับ
โอเค ทีนี้มันก็จะขึ้นข้อความให้คุณกรอกข้อมูลลงไป แต่เอ๊ะ.......ไหงมันไม่ยักกะมีภาษาไทยขึ้นมาเลยแฮะ
........
มันคืออะไรกันแน่เนี่ยะ
...........ใจเย็นๆครับกำลังจะอธิบายในหัข้อถัดไป
สำหรับส่วนในการแสดงส่วน input นี้ให้เป็นภาษาไทยนั้นให้เราทำการเปลี่ยน font ให้เป็น font ที่รองรับภาษาไทยได้ ประมาณบรรทัดที่ 150 ในไฟล์ option.rpy
style.default.font = " angsa.ttf " <------ เคยอธิบายไปแล้วในเรื่องการปรับแต่งค่าก่อนการสร้างเกมส์ อย่าลืมลบ # ออกก่อนล่ะ
โดยที่เราจะต้องทำการ Copy File font ภาษาไทยของเรามาลงใน Folder game ของเราก่อนนะครับทีนี้เนี่ยะมันก็จะสามารถแสดงผลภาษาไทยได้ทั้ง Inputและ Output เลยล่ะ
กรอบคำพูด
สำหรับหัวข้อนี้จะมีฟังก์ชันที่สำคัญอยู่ตัวนึงนั้นก็ คือ ฟังก์ชัน Character โดยปกติแล้วต้องประกาศในส่วน init เท่านั้น สำหรับรูปแบบการใช้งานเบื้องต้นนั้นประกาศดังนี้
Character ( name , Keyword Arguments1 , Keyword Arguments2 , ... )
name หมายถึง ชื่อของตัวละครหากไม่ต้องการจะแสดงชื่อให้พิมพ์ None ซะ โดยปกติไม่สามารถพิมพ์ภาษาไทยได้ หากต้องการให้พิมพ์ภาษาไทยได้ต้องแก้ไขดังนี้
$ name = file(config.gamedir + "/ชื่อไฟล์ที่เก็บชื่อตัวละครไว้.txt ").read().decode("utf-8") <------เพิ่มคำสั่งบรรทัดนี้ลงไป
$ a = Character(name, color="#c8ffc8", what_font="ชื่อของ font ภาษาไทย", font="ชื่อของ font ภาษาไทย") <----- จากนั้นก็ประกาศค่าตามปกติ
หนึ่ง ชื่อก็หนึ่งไฟล์ไปเลยนะครับไม่ต้องงก ตอนที่ save ไฟล์ .txt ให้ save เป็นชนิด UTF-8 ด้วย <----- (ตรงนี้สำคัญมากๆ)
Keyword Arguments หมายถึง option ต่างๆที่เราจะกำหนดลงไปมีมากมายหลายตัวจะขอยกมาแค่ตัวที่พบบ่อยๆละกัน
- color = "#c8ffc8" <--- สีชื่อของตัวละคร
- what_color="#000" <----- กำหนดสีของtext
- what_font="angsananew" <----- กำหนด font ของ text ในเฟรม
- font = "angsananew" <----- กำหนด font ของชื่อตัวละคร
- who_prefix = “ตัวอักษร” <----- กำหนดให้ตัวอักษรที่เราตั้งไว้นำหน้าชื่อตัวละครเสมอ
- who_suffix = “ตัวอักษร” <----- กำหนดให้ตัวอักษรที่เราตั้งไว้ตามหลังชื่อตัวละครเสมอ
- what_prefix = “ตัวอักษร” <----- กำหนดให้ตัวอักษรที่เราตั้งไว้นำหน้าข้อความเสมอ
- what_suffix = “ตัวอักษร” <----- กำหนดให้ตัวอักษรที่เราตั้งไว้ตามหลังข้อความเสมอ
- window_left_margin = 200 <----- กำหนดให้เฟรมอยู่ห่างจากจอด้านซ้ายไปกี่พิกเซล
- window_right_margin = 200 <----- กำหนดให้เฟรมอยู่ห่างจากจอด้านขวาไปกี่พิกเซล
- window_xmargin=20 <----- กำหนดให้เฟรมอยู่ห่างจากจอด้านซ้ายและขวาไปกี่พิกเซล
- window_ymargin=30 <----- กำหนดให้เฟรมอยู่ห่างจากจอด้านบนและล่างไปกี่พิกเซล
- window_yfill=True <----- กำหนดให้เฟรมมีขนาดใหญ่เต็มจอ
- window_yminimum = 300 <----- กำหนดความสูงของเฟรม
- what_underline = True <----- กำหนดให้ขีดเส้นใต้ใต้ข้อความเสมอ
- show_two_window = True <----- กำหนดให้แยกชื่อตัวละครกับเฟรมคำพูดออกมาอยู่คนละเฟรม
- show_side_image = “ชื่อภาพ” <----- กำหนดรูปไว้ในกรอบคำพูด โดยปกติแล้วมักจะประกาศรวมอยู่กับฟังก์ชัน image สามารถเรียกใช้งานได้ดังนี้
show_side_image = image(“ชื่อภาพ”, ypos=380, xpos=100) โดยที่
ypos = 380 <----- ตำแหน่งของภาพที่จะแสดงในแกน y
xpos = 100 <----- ตำแหน่งของภาพที่จะแสดงในแกน x
- ctc = “ ชื่อภาพ “ <----- รูปภาพท้ายข้อความเวลาจะขึ้นข้อความใหม่(สามารถใช้ร่วมกับ ฟังก์ชัน animetion ได้ ซึ่งจะขอกล่าวในบทถัดไป)
- ctc_position = "nestled" / "fixed" <----- “nestled” รูปภาพท้ายข้อความจะขึ้นอยู่ที่ท้ายข้อความ ในขณะที่ “fixed” จะทำให้ภาพไปอยู่ที่มุมขวาล่างของกรอบข้อความเสมอ
- window_background = None <------ ไม่ต้องการให้มีเฟรมคำพูด
- show_say_vbox_properties = dict( xalign=0.5 , yalign=0.5) <----- กำหนดให้ตัวหนังสือทั้งหมดอยู่ห่างจากเฟรมด้านซ้าย(x) และเฟรมด้านบน(y) ตามที่เรากำหนด
ที่เหลือสามารถอ่านเพิ่มเติมได้ในนี้ครับ http://www.renpy.org/wiki/renpy/doc/reference/Properties_and_Styles
หมายเหตุ สำหรับตัวอย่างที่เขียนไว้ข้างบนนั้นเป็นวิธีการสำหรับเวอร์ชั่นเก่าๆน่ะครับ สำหรับตัวเวอร์ชั่น ใหม่ๆแล้วเราไม่จำเป็นต้องประกาศหรือสร้างไฟล์อะไรให้ยุ่งยากอย่างงี้แล้วล่ะครับ
(อันนี้ก็ไม่ทราบเหมือนกันนะครับว่ามันแก้ไขข้อด้อยทางด้านภาษาไปแล้วตั้งแต่เวอร์ชั่นไหน
ก็เอาเป็นว่าเวอร์ชั่นใหม่สุดในขณะนี้ละกันครับ) แต่เอาเป็นว่าวิธีเก่าๆผมก็ยังไม่ลบ ออกละกันถือว่ารู้ไว้หลายๆวิธีก็ดี
สำหรับวิธีการในเวอร์ชั่นใหม่นั้นเราก็จะประกาศเพียงแค่
$ a = Character("ชื่อภาษาไทย", color="#c8ffc8", what_font="ชื่อ font ภาษาไทยของคำพูดตัวละครนั้น.ttf", font="ชื่อ font ภาษาไทยของชื่อตัวละคร.ttf")
ตัวอย่าง
$ e = Character("ไอรีน",color="#c8ffc8",font="angsa.ttf",
what_font="angsa.ttf" )
# เวลาจะใช้งานก็ประกาศแล้วเขียนภาษาไทยตามปกติเลย
e "ภาษาไทย"
เท่านี้ก็สามาเราเรียกใช้ภาษาไทยได้หมดแล้วครับ ที่เหลือก็เพียงแค่ Copy ไฟล์ Font ภาษา ไทยมาไว้ใน Folder Game ของเราก่อนเท่านั้นเองครับ
วิธีนี้จะแตกต่างไปจากวิธีของการตั้งค่า Font ในส่วนของการปรับแต่ง Option ที่เคยกล่าวไว้ ในบทความแรกๆนะครับ ในบทความการปรับแต่ง Option นั้นจะเป็นการกำหนดว่าทั้งเกมส์นั้น จะใช้ Font อะไรเป็น Font พื้นฐาน ในขณะที่วิธีนี้เป็นการกำหนดว่าตัวละครนี้จะใช้ Font อะไร เป็น Font ประจำตัวของตัวละครตัวนั้น (แต่ถ้ามีหลายอารมณ์ก็ต้องทำแบบนี้ใหม่อีกเรื่อยๆอ่ะ นะ
)



รวบรวมเครื่องมือที่มีประโยชน์ 

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




....... ในช่วงนี้จริงๆแล้วยังมีอีกเยอะแต่เป็นภาพขีดๆดูแล้วมั่วๆน่ะ
......
ช่วงนี้วันหยุดยาวมีเวลาว่างเยอะต้องรีบๆอัพให้หมดเร็ว เนื้อหาในบทนี้นั้นจะเข้าสู่การศึกษาภาษานี้อย่างจริงจังซะทีอาจจะต้องทำการแยกย่อยเป็นหลายๆส่วนหน่อยเพราะว่าเนื้อหาในส่วนนี้มันมีมากมายมหาศาลจริงๆกว่าจะแปลหมดคงอีกนานดังนั้นผมก็จะค่อยๆแปลมาลงไปเป็นส่วนๆมาละกันครับ ซึ่งเนื้อหาในบทนี้ก็จะเน้นหนักไปทางคำสั่งที่เกี่ยวกับ




...... เป็นต้น 

อ๊า.......