27 สิงหาคม 2562

Ren'Py พื้นฐาน | บทที่ 8 Animation and Transformation Language (ATL)

จากบทที่แล้วเราได้เรียนการแสดงรูปและวิดีโอเบื้องตันแล้ว ในบทนี้จะมาใส่ลูกเล่นให้รูปมากขึ้นกว่าเดิม การใส่ลูกเล่นขั้นสูงต้องใช้ ATL (Animation and Transformation Language) ATL คือส่วนขยายจากคำสั่งอื่น อยู่ภายในบล็อกของคำสั่งอื่น คำสั่งแม่เพียงอย่างเดียวทำได้แค่ใช้งานพื้นฐานเท่านั้น สิ่งที่ขยายมาใน ATL คือลูกเล่น หรืออธิบายใหม่อย่างง่าย ๆ ว่า ATL ก็คือลูกเล่นนั่นเอง


คำสั่งแม่ของ ATL

ATL เป็นส่วนขยายของคำสั่งอื่น ต้องอยู่ภายในบล็อกของคำสั่งที่ไปขยาย คำสั่งที่ ATL สามารถขยายได้มีดังนี้

Show และ Scene

show และ scene คือคำสั่งพื้นฐานสำหรับการแสดงรูป สองคำสั่งนี้จึงรองรับลูกเล่นของรูปโดยตรง ลูกเล่นจะแสดงเมื่อใช้คำสั่งเหล่านี้ ผู้เขียนแนะนำให้ใส่ ATL ทุกอย่างในคำสั่ง show หรือ scene เนื่องจากเข้าใจและใช้งานง่าย

ตัวอย่างการใส่ ATL ในบล็อก show


Image

image คือคำสั่งสำหรับประกาศตัวแปรรูป เราสามารถใส่ ATL ไปพร้อมกับการประกาศตัวแปรรูปได้ แต่เนื่องจาก image เป็นคำสั่งประมวลผลล่วงหน้า (Preprocessor Directive) ซึ่งจะแซงคิวคำสั่งอื่น ทำให้ลูกเล่น ATL ในบล็อก image จึงแซงคิวคำสั่งอื่นตามไปด้วย

อย่าลืมว่าคำสั่ง image เป็นเพียงคำสั่งประกาศตัวแปรรูป ไม่ใช่คำสั่งแสดงรูป ถ้าต้องการแสดงรูปต้องใช้คำสั่ง show หรือ scene แล้วตามด้วยชื่อตัวแปรรูป

ตัวอย่างการใส่ ATL ในบล็อก image


Transform

transform คือคำสั่งรูปที่เกี่ยวกับตำแหน่งรูป เช่น กำหนดให้รูปอยู่ฝั่งซ้ายของหน้าจอ สามารถใส่ ATL ที่เกี่ยวกับตำแหน่งรูปได้ แต่ผู้เขียนแนะนำให้ใช้คำสั่ง show หรือ scene แทนดีกว่า เนื่องจากสามารถรองรับลูกเล่นตำแหน่งรูปได้เหมือนกัน อีกทั้งยังใช้ง่ายและหลากหลายกว่าคำสั่ง transform ด้วย

tranform เป็นคำสั่งประมวลผลล่วงหน้า (Preprocessor Directive) ซึ่งจะแซงคิวคำสั่งอื่น เหมาะสำหรับลูกเล่นที่ใช้ครั้งเดียว ถ้าไฟล์สคริปต์มีทั้งคำสั่ง image และ transform คำสั่ง transform จะทำงานก่อน เนื่องจากมีลำดับขั้นที่สูงกว่า

ตัวอย่างการใส่ ATL ในบล็อก transform




Align และ  Pos: กำหนดตำแหน่งรูป

คำสั่งชุด Align
xalign คือคำสั่งระบุตำแหน่งหน้าจอ แบบอัตราส่วน ในแนวนอน โดย 0.0 คือซ้าย และ 1.0 คือขวา
yalign คือคำสั่งระบุตำแหน่งหน้าจอ แบบอัตราส่วน ในแนวตั้ง โดย 0.0 คือบน และ 1.0 คือล่าง

คำสั่งชุด Pos
xpos คือคำสั่งระบุตำแหน่งหน้าจอ แบบตามจริง ในแนวนอน ระบุเป็นพิกเซล
ypos คือคำสั่งระบุตำแหน่งหน้าจอ แบบตามจริง ในแนวตั้ง ระบุเป็นพิกเซล

คำสั่งชุด Align และ Pos ใช้สำหรับการแสดงรูปในตำแหน่งที่ระบุไว้ ต้องตามด้วยตัวเลข ความแตกต่างของคำสั่งสองชุดนี้อยู่ที่การเียกตำแหน่งบนหน้าจอ Align จะอ้างอิงจากอัตราส่วนหน้าจอ ค่าควรอยู่ระหว่าง 0.0 ถึง 1.0 ส่วนคำสั่งชุด Pos อ้างอิงจากพิกเซลจริง ในทางปฏิบัติคำสั่งสองชุดนี้ใช้ระบุตำแหน่งได้เหมือนกัน
รูปที่ 8.1 เปรียบเทียบคำสั่งชุด Align และ Pos (จอขนาดมาตรฐาน)

ตัวอย่างการใช้คำสั่งชุด Pos

รูปที่ 8.2 การใช้คำสั่งชุด Pos เพื่อแสดงรูปในตำแหน่งที่ต้องการ


Linear: เคลื่อนที่รูป

linear คือคำสั่งเคลื่อนที่รูปจากตำแหน่งปัจจุบันไปยังตำแหน่งใหม่ ต่อท้ายคำสั่งด้วยเวลาที่ใช้ในการเคลื่อนรูป ต้องใช้คู่กับคำสั่งชุด Align หรือ Pos เพื่อระบุตำแหน่งใหม่ ถ้าแสดงรูปเดิมในตำแหน่งใหม่โดยไม่ใช้คำสั่ง linear จะเป็นการลบรูปในตำแหน่งเดิม และแสดงรูปในตำแหน่งใหม่ทันที ส่วนคำสั่ง linear รูปจะมีการเคลื่อนที่ผ่านบริเวณที่อยู่ระหว่างตำแหน่งเดิมและตำแหน่งใหม่ รูปแบบของคำสั่ง linear คือ


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

ตัวอย่างการใช้คำสั่ง linear

รูปที่ 8.3 การเคลื่อนที่รูปด้วยคำสั่ง linear


Repeat: วนซ้ำ

repeat คือคำสั่งที่วนซ้ำบล็อกนั้นตั้งแต่ต้น คำสั่งนี้ต้องอยู่บรรทัดสุดท้ายของบล็อกที่ต้องการวนซ้ำ รูปแบบของคำสั่ง repeat มี 2 แบบได้แก่ รูปแบบที่ไม่มีตัวเลขต่อท้าย จะเป็นการวนซ้ำแบบไม่สิ้นสุด


และรูปแบบที่ต่อท้ายด้วยจำนวนเต็ม ตัวเลขนั้นคือจำนวนรอบที่บล็อกนั้นทำงาน (ไม่ใช่จำนวนรอบที่วนซ้ำ) เช่น repeat 3 หมายถึงบล็อกนั้นจะทำงาน 3 ครั้ง, repeat 1 หมายถึงบล็อกนั้นจะทำงาน 1 ครั้ง (ไม่วนซ้ำ) หมายความว่าจะใส่หรือไม่ใส่ repeat 1 ก็ไม่แตกต่างกันเลย



Pause: หยุดชั่วคราว

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


อันที่จริงคำสั่ง pause เป็นคำสั่งที่ใช้ได้ทุกที่ในไฟล์สคริปต์ ไม่จำเป็นต้องเป็น ATL ก็ได้ แต่ในบทนี้เราจะใช้คำสั่ง pause ในรูปแบบ ATL

ตัวอย่างการใช้คำสั่ง pause ในรูปแบบ ATL เพื่อเคลื่อนที่รูปเป็นสามเหลี่ยมโดยวนซ้ำไม่สิ้นสุด



Parallel: ทำพร้อมกัน

parallel คือคำสั่งที่ใช้แยกคำสั่งหลายชุดออกจากกัน เพื่อให้คำสั่งหลายคำสั่งสามารถทำงานได้พร้อมกัน ถ้าไม่ใช้คำสั่ง parallel คำสั่งที่อยู่ในบล็อกจะสามารถทำงานได้ทีละหนึ่งคำสั่ง ต้องรอให้คำสั่งที่กำลังทำงานอยู่เสร็จก่อน คำสั่งต่อไปจึงจะทำงานได้ รูปแบบของคำสั่ง parallel คือ


ตัวอย่างการใช้คำสั่ง parallel เพื่อเปลี่ยนรูปขณะที่รูปกำลังเคลื่อนที่



Size และ Zoom: เปลี่ยนขนาดรูป

ทั้งคำสั่ง size และ zoom เป็นคำสั่งที่เปลี่ยนขนาดรูปตามที่กำหนด ความแตกต่างของสองคำสั่งนี้คือการใช้คำสั่ง size ต้องกำหนดเป็นขนาดรูปในหน่วยพิกเซล ส่วนคำสั่ง zoom ต้องกำหนดเป็นอัตราส่วนเทียบกับขนาดรูปต้นแบบ (เป็นกี่เท่าของรูปต้นแบบ) รูปแบบของคำสั่ง size คือ


รูปแบบของคำสั่ง zoom คือ


ตัวอย่างการใช้คำสั่ง zoom

รูปที่ 8.4 การขยายรูปด้วยคำสั่ง zoom


Tile: แสดงรูปซ้ำต่อกัน

xtile คือทำสั่งที่แสดงรูปซ้ำต่อกันหลายรูป ในแนวนอน รูปแบบของคำสั่ง xtile คือ


ytile คือทำสั่งที่แสดงรูปซ้ำต่อกันหลายรูป ในแนวตั้ง รูปแบบของคำสั่ง ytile คือ


ตัวอย่างการใช้คำสั่งชุด Tile

รูปที่ 8.5 การแสดงรูปซ้ำต่อกันด้วยคำสั่งชุด Tile


Crop: ตัดรูป

crop คือคำสั่งที่ตัดรูปให้มีขนาดตามต้องการ หน่วยเป็นพิกเซล รูปแบบของคำสั่ง crop คือ


ตัวอย่างการใช้คำสั่ง crop

รูปที่ 8.6 การตัดรูปด้วยคำสั่ง crop


ส่งท้ายบท

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

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

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