Renpy Programming คำสั่งเบื้องต้นในการเขียน ตอนที่ 4 ( sound, Transitions(การตัดฉาก))
posted on 09 May 2011 08:36 by vashiya in Programming, renpy กลับมาอีกครั้งหลังจากที่หายไปนาน เอาล่ะ.....เอาล่ะ.... สำหรับในบทความนี้ก็จะมาอธิบายเกี่ยวกับเนื้อหาเรื่อง การตัดฉากและ Sound กันนะครับ ซึ่งในเรื่องของการตัดฉากนั้นมันก็จะต่อเนื่องจากบทความในบทแรกครับ และแน่นอนว่าต่อจากเนื้อหาของเรื่องการตัดฉากก็จะต่อด้วยของตำแหน่งการวางภาพครับ
แต่ว่าเนื่องจากตอนเขียนเวลามันไม่เพราะว่าเนื้อหาในเรื่องนี้ของการตัดฉากนั้นค่อนข้างมากแล้วก็ออกจะทำผมงงๆหน่อย ก็เลยขอเอามาลงแค่เฉพาะเรื่องการตัดฉากอย่างเดียวก่อนครับ
ส่วนเรื่องของตำแหน่งการวางภาพผมก็จะขอตัดไปกล่าวในบทถัดๆไปละกันครับ ในส่วนนี้นั้นผมจะขออัพเกรดการสอนขึ้นมาหน่อยโดยอ้างอิงมาจาก Version ใหม่นะครับ(Version 6.12)ส่วนบทความที่ผ่านๆมาหากต้องเพิ่มเติมอะไรแล้วเดียวผมจะบอกอีกทีนึงละกัน เอาล่ะเรามาดูกันดีกว่าว่าในตอนนี้เราต้องเรียนเรื่องอะไรกันนะครับ
- Sound
- การตัดฉาก(Transitions)
- Sound สำหรับในเรื่องของเสียงและเพลงใน Renpy นั้น ไฟล์ที่รองรับก็ได้แก่ .ogg, .mp2, .mp3, .wav นะครับ
เริ่มต้นจากเรื่องง่ายๆก่อนนะจ๊ะสำหรับส่วนนี้จะมีคำสั่งหลักๆอยู่ 3 ตัวด้วยครับ คือ คำสั่ง play, queue และstop
คำสั่ง play เป็นคำสั่งที่ใช้สำหรับเปิดเพลงหรือเสียง วีธีการใช้งานคำสั่งนีมีดังนี้ครับ
"play" ( "sound" | "music" ) Name of music file
( "fadeout" Number )?
( "fadein" Number )?
( "channel" 0-7 )?
option ต่างๆก็ได้แก่
"sound" | "music" (เลือกเอาอย่างใดอย่างหนึ่ง) เป็นการกำหนดให้รู้ว่าเสียงที่เราเอาเข้ามานั้นเป็นเสียงหรือเพลง
Name of music file หมายถึงชื่อไฟล์ของเพลงหรือเสียงที่เราต้องการครับ เราจำเป็นที่ตะต้องเขียนช่อนี้อยู่ภายใต้เครื่องหมาย “ ” ด้วยนะครับ(เพราะเป็นค่า string) ไฟล์ที่สามารถรองรับได้ก็ได้แก่ไฟล์ .ogg, .mp2, .mp3, .wav
"fadeout" Number เป็นการกำหนดว่าเมื่อปิดหรือหยุดเพลงมาแล้วเสียงมันจะค่อยลงภายในกี่วินาที ส่วน Number นั้นหมายถึงเวลาที่จะใชัให้มันค่อยลง คิดเป็นวินาที จะมีหรือไม่มีก็ได้
"fadein" Number เป็นการกำหนดว่าเมื่อเปิดเพลงมาแล้วเสียงมันจะค่อยๆดังขึ้นภายในกี่วินาที ส่วน Number นั้นหมายถึงเวลาที่จะใชัให้มันดังขึ้น คิดเป็นวินาที จะมีหรือไม่มีก็ได้
"channel" 0-7 เป็นการกำหนดแชนแนลของเสียงว่าจะให้ออกที่แชนแนลไหน มี 7 แชนแล(0-7) จะมีหรือไม่มีก็ได้ ในกรณีที่เป็น sound ค่า defaults เป็น 0 ถ้า เป็น music ค่า defaults จะเป็น 7 (แชนแนลก็คือลำโพงนะแหล่ะครับ มีอยู่ 8 ตัวคือ ลำโพงหมายเลข 0-7 ) ส่วนใหญ่การกำหนดอย่างงี้หมายถึงการเล่นเพลงหลายๆเพลงพร้อมกันในเวลาเดียวกันอ่ะนะ ประมาณว่าเปิดเพลงซ้อนกันได้ 8 เพลงในเวลาเดียวกันอ่ะนะ หรือบางทีก็มีเพลงเป็นพื้นหลังแล้วเอฟเฟคก็ช่องอื่นเป็นต้น
ตัวอย่างการใช้งานคำสั่งนี้ เช่น
play music "mozart.ogg"
play sound "18005551212.ogg"
play sound "woof.ogg"
เรามาดูอะไรที่มันออกจะซับซ้อนกว่านี้หน่อยดีกว่านะจ๊ะ
play music [ "01.wav", "012.wav" ] fadeout 1.0 fadein 1.0
เล่น 2 เพลงต่อกันไปเลย (จบเพลงสุดท้ายก็มาเริ่มเพลงแรกใหม่) ถ้าอยากต่ออีกเป็น 3 หรือ 4 เพลง ก็ค่อยเพิ่มต่อไปอีกเรื่อยๆนะครับ
คำสั่ง queue (คิวเพลงน่ะแหล่ะ) คำสั่งนี้เหมือนกับคำสั่ง play ก็มิปาน ต่างกันนิดหน่อยตรงที่มันไม่สามารถกำหนด fadein/fadeout ได้เท่านั้นเอง
มีลักษณะการใช้งานดังนี้
"queue" ( "sound" | "music" ) Name of music file
( "channel" 0-7 )?
ส่วนoption ต่างๆให้ไปดูที่คำสั่ง play เอาละกันครับเพราะว่ามันเหมือนกันเด๊ะเลยล่ะ ตัวอย่างการใช้งานมีดังนี้
queue sound "woof.ogg"
queue music [ "a.ogg", "b.ogg" ]
คำสั่ง stop ใช้สำหรับหยุดเพลงและเสียง มีลักษณะการใช้งานดังนี้
"stop" ( "sound" | "music" )
( "fadeout" Number)?
( "channel" 0-7 )?
option ต่างๆให้ไปดูที่คำสั่ง play เช่นกันครับ ตัวอย่างการใช้งานมีดังนี้
stop sound
stop music fadeout 1.0
- การตัดฉาก(Transitions)
ก่อนที่ผมจะเริ่มสอนในหัวข้อนี้นั้นผมขอบอกก่อนว่าเรื่องนี้นั้นเป็นเรื่องที่ต่อเนื่องมาจากหัวข้อเรื่อง image นะครับหากใครลืมๆไปแล้วสามารถย้อนกลับไปดูทบทวนได้ครับ เอาล่ะสำหรับคำสั่งแรกในหัวข้อนี้ที่ผมต้องการที่จะเสนอนั่นก็คือ
คำสั่ง hide แปลตามตัวเลยครับหมายถึงการซ่อนตัวละครเอาไว้หากเราต้องการที่จะทำให้ตัวละครนี้หายไปจากฉากของคุณเราขอแนะนำคำสั่งนี้ครับ หลักการใช้งานก็มีดังนี้ครับ
“hide” ชื่อตัวละคร
ตัวอย่างการใช้งานคือ
image eileen happy = "eileen_happy.png"
hide eileen happy
คำสั่ง with เป็นคำสั่งที่มีไว้สำหรับกำหนดรูปแบบในการตัดฉากหรือรูปแบบในการปรากฏตัวของตัวละครครับ โดยมีหลักการใช้งานดังนี้
"with" คำสั่ง option, ตัวแปร, ฟังก์ชั่น
โดยปกติคำสั่งนี้มักจะนำหน้าหรือตามหลังคำสั่ง show ,hide ,scene
คำสั่ง option ในที่นี้นั้นเราจะรวมไปถึงตัวแปรต่างๆที่เราสามารถระบุค่าที่ต้องการจะปรับแต่งค่าต่างๆที่อยู่นอกเหนือจากนี้ได้โดยใช้ function ที่กำหนดมาให้ ฟังก์ชั่นและ optionต่างๆนั้นมีดังนี้
None <--- กำหนดว่าไม่ต้องทำอะไร
Pause(time) <---- เป็นฟังก์ชั่นที่บอกให้หยุดรอก่อนโดยตัวแปร time คือจำนวนของวินาทีที่เราต้องการที่จะหยุดรอ
Fade(out_time, hold_time, in_time,color = '# ค่าของสี เลขฐาน16') <--- เป็นฟังชั่นที่ใช้กำหนดให้แสดง BackGround เป็นสีต่างๆที่เราต้องการก่อนแล้วค่อยทำการแสดงภาพที่เราต้องการตามขึ้นมาโดยที่ถ้าเราไม่ใส่ค่าอะไรจะให้ค่าดีฟอลเป็น สี background เป็นสีดำ เวลาในการขึ้น Background เป็น 0.5 เวลาที่ใช้ในการแสดงสี Background เป็น 0และเวลาในการแสดงภาพที่เราต้องการจะเป็น 0.5 โดยที่ค่าพารามิเตอร์ต่างๆมีความหมายดังนี้
out_time คือ เวลาในการขึ้น Background
hold_time คือ เวลาที่ใช้ในการแสดงสี Background
in_time คือ เวลาที่เปลี่ยนจาก background มาป็นรูปปกติ
color = '# ค่าของสี เลขฐาน16' คือ สีของ backgroundที่เราต้องการ
หากเราต้องการใช้เป็นแบบดีฟอลให้เรียกใช้เป็นคำสั่ง fade แทน
ตัวอย่างการใช้งาน เช่น
show eileen happy
with Fade(0.3,0,0.5,color = '#FFFFFF') ####<--- จะได้เป็นแฟรชสีขาว
หรือ
show eileen happy
with fade ####<---- ในกรณีที่ไม่ต้องการจะกำหนดค่าอะไรใช้เป็นค่าดีฟอลแทน
Dissolve(time) <--- จะค่อยๆปรากฏภาพขึ้นมาตามเวลาที่เรากำหนดในวงเล็บ มีหน่วยเป็นวินาที หากไม่กำหนดค่าในวงเล็บ จะให้ค่าดีฟอลเป็น 0.5 วินาทีถ้าเราต้องการใช้เป็นแบบดีฟอลให้เรียกใช้เป็นคำสั่ง dissolve แทน
ตัวอย่างการใช้งาน เช่น
show eileen happy
with Dissolve(10) ####<---- ใช้เวลา 10 วินาทีในการปรากฏภาพขึ้นมา
หรือ
show eileen happy
with dissolve ####<---- ตั้งค่าดีฟอลโดยกำหนดให้ใช้เวลา 0.5 วินาทีในการปรากฏภาพขึ้นมา
pixellate <---- ทำเป็นภาพโมเสกก่อนจากนั้นก็จะค่อยๆกลับมาเป็นภาพแบบปกติ
move <--- เป็นการกำหนดให้รูปนั้นเลื่อนไปยังตำแหน่งที่เราต้องการโดยปกติจะนิยมใช้ร่วมกับคำสั่ง at (จะกล่าวในหัวข้อถัดไป)
ตัวอย่างการใช้งาน เช่น
show eileen happy
with move ####<---- หากว่าเราต้องการที่จะเลื่อนตำแหน่งเราต้องใช้คำสั่งmove
#### กำหนดไปทั้งตำแหน่งเริ่มและตำแหหน่งจบเลยครับ
show eileen happy at left
with move ####<----- จะเป็นการเลื่อนภาพจากตรงกลางมายังด้านซ้ายของจอ
moveinright, moveinleft, moveintop, moveinbottom <---- สั่งให้รูปที่กำหนดวิ่งเข้ามาจากนอกจอสู่ในจอทางด้าน ขวา / ซ้าย / บน และ ล่าง ตามลำดับ โดยปกติจะใช้ร่วมกับคำสั่ง show หรือ scene
moveoutright, moveoutleft, moveouttop, moveoutbottom <---- สั่งให้รูปที่กำหนดวิ่งออกไปจากจอโดยวิ่งออกไปทาง ขวา / ซ้าย / บน และ ล่าง ตามลำดับ โดยปกติจะใช้ร่วมกับคำสั่ง hide
zoomin <---- ค่อยๆขยายจนกลายเป็นขนาดปกติ (ประมาณว่าผุดขึ้นมา)
zoomout <---- ค่อยๆหดตัวจนกลายเป็นหายไปเลย
zoominout <---- ให้ผลเหมือนกับ zoomin กับ zoomout หมายความว่า หากเราใช้กับคำสั่ง show หรือ scenc จะได้ผลออกมาเป็น zoomin แต่ว่าหากใช้กับคำสั่ง hide จะให้ผลออกมาเป็น zoomout
vpunch <---- เขย่าขึ้นลง
hpunch <---- เขย่าซ้ายขวา
blinds <---- เป็นการตัดฉากโดยมีลักษณะการตัดฉากเป็นแบบเปิดม่านเป็นซี่ๆ
squares <---- เป็นการตัดฉากโดยมีลักษณะการตัดฉากเป็นแบบเป็นบล็อคสี่เหลี่ยมหลายๆบล็อคขึ้นมา
wiperight <---- ตัดฉากใหม่แบบเปิดม่านไปทางขวา
wipeleft <---- ตัดฉากใหม่แบบเปิดม่านไปทางซ้าย
wipeup <---- ตัดฉากใหม่แบบเปิดม่านขึ้นข้างบน
wipedown <---- ตัดฉากใหม่แบบเปิดม่านลงข้างล่าง
slideright <---- ตัดฉากใหม่แบบเลื่อนแผ่นภาพใหม่เข้ามาทางขวา
slideleft <---- ตัดฉากใหม่แบบเลื่อนแผ่นภาพภาพใหม่เข้ามาทางซ้าย
slideup <---- ตัดฉากใหม่แบบเลื่อนแผ่นภาพใหม่มาจากข้างล่าง
slidedown <---- ตัดฉากใหม่แบบเลื่อนแผ่นภาพใหม่มาจากข้างบน
slideawayright <---- ตัดฉากใหม่แบบเลื่อนแผ่นภาพเก่าออกไปทางขวา
slideawayleft <---- ตัดฉากใหม่แบบเลื่อนแผ่นภาพเก่าออกไปทางซ้าย
slideawayup <---- ตัดฉากใหม่แบบเลื่อนแผ่นภาพเก่าออกไปทางด้านบน
slideawaydown <---- ตัดฉากใหม่แบบเลื่อนแผ่นภาพเก่าออกไปทางด้านล่าง
irisout <---- ตัดฉากใหม่แบบเป็นสี่เหลี่ยมขยายวงออกไป
irisin <---- ตัดฉากใหม่แบบเป็นสี่เหลี่ยมหดตัวเข้ามา
นอกจากนี้เรายังสามารถที่จะกำหนดลักษณะการตัดฉากตามที่เราต้องการได้อีกด้วย โดยใช้ฟังก์ชั่น ImageDissolve
ฟังก์ชั่น ImageDissolve นั้นจะเป็นการกำหนดให้เปลี่ยนจากภาพเก่าเป็นภาพใหม่โดยการใช้รูปภาพตามที่เราสร้างขึ้นมาเองครับ โดยมันจะเริ่มขึ้นฉากใหม่ โดยจะเริ่มเปลี่ยนฉากใหม่จากที่มันเป็นสีขาวก่อนน่ะครับหลังจากนั้นก็จะค่อยๆไล่เปลี่ยนฉากใหม่ตามความเข้มของสีไปจนเป็นสีดำ (เอาง่ายๆนะว่าเราต้องใช้ภาพขาวดำในการกำหนดละกัน) มีลักษณะการใช้งานดังนี้
ImageDissolve (image, time, ramplen, reverse=False)
โดยพารามิเตอร์แต่ละตัวมีความหมายดังนี้
image <---- รูปขาวดำที่ต้องการ
time <---- เวลาทั้งหมดที่ใช้ในการตัดฉาก
ramplen <---- จากตามที่แปลมันหมายถึงจำนวนพิกเซลที่ใช้ในการไล่สี(ไม่แน่ใจนะ) แต่ที่ทดลองมามันเป็นการกำหนดค่าความสมูทในการไล่สีอ่ะครับ ถ้ายิ่งมีค่ามากก็จะดูนุ่มนวลมากขึ้นเวลาที่ตัดฉาก ถ้ากำหนดค่าน้อยๆก็จะตัดฉากใหม่แบบแข็งๆแต่เร็ว
reverse=False <---- ถ้าเป็น True จะเป็นการไล่เปลี่ยนฉากใหม่โดยจะเริ่มเปลี่ยนจากสีดำก่อนแล้วค่อยๆไล่เปลี่ยนไปจนถึงสีขาวแทน
ตัวอย่างการใช้งาน
$ circleirisin = ImageDissolve("id_circleiris.png", 1.0, 8, reverse=True)
show eileen happy
with dissolve
scene black
with circleirisin
หรือเราจะใช้เป็นอย่างงี้ก็ได้
show eileen happy
with dissolve
scene black
with ImageDissolve("id_circleiris.png", 1.0, 8, reverse=True)



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