ต่อจาก
บทที่ ๑๕
ในบทนี้จะพูดถึงออบเจ็กต์คลาส Text ซึ่งในบทที่ผ่านๆมาก็ได้ใช้มามากแล้วแต่ยังไม่ได้ลงลึกถึงรายละเอียดและการปรับแต่งต่างๆ
การปรับขนาดตัวหนังสือ
ตัวหนังสือที่สร้างจากคลาส Text นั้นสามารถกำหนดขนาดได้ตั้งแต่ตอนที่สร้างขึ้น โดยทั่วไปขนาดของอักษรถูกกำหนดโดยคีย์เวิร์ด ๒ ตัวคือ size และ font_size
ตัวอย่าง ลองเทียบขนาดอักษรที่ได้จากค่า size และ font_size ต่างๆกัน
import manimlib as mnm
class Manimala(mnm.Scene):
def construct(self):
lis_text = []
for j in range(4):
for i in range(3):
s = i+1 # ค่า size
fs = (j+1)*12 # ค่า font_size
text = mnm.Text(f'{s},{fs}',size=s,font_size=fs)
lis_text.append(text)
vg = mnm.VGroup(*lis_text,buff=0)
vg.arrange_in_grid(n_cols=3)
self.play(
mnm.Write(vg),
run_time=1.5
)
หากไม่ได้ใส่ ค่าตั้งต้นจะอยู่ที่ size=1 และ font_size=48
นอกจากนี้ยังมีอีกวิธีที่ใช้กำหนดขนาดของตัวหนังสือได้ ก็คือกำหนดความสูงของข้อความ โดยใช้คีย์เวิร์ด height
ตัวอย่าง
import manimlib as mnm
class Manimala(mnm.Scene):
def construct(self):
lis_text = []
for i in range(9):
h = (2+i)/5 # ความสูง
text = mnm.Text(f'{h}',height=h)
lis_text.append(text)
vg = mnm.VGroup(*lis_text,buff=0)
vg.arrange_in_grid(n_cols=3)
self.play(
mnm.Write(vg),
run_time=1.5
)
เพียงแต่ว่าความสูงในที่นี้คือความสูงรวมทั้งหมด ดังนั้นคำที่ควรจะสูงต่างกันก็จะกลายเป็นอักษรขนาดต่างกัน
เช่น
import manimlib as mnm
class Manimala(mnm.Scene):
def construct(self):
ss = ['ค','คี','คู','คี่','คู่']
vg = mnm.VGroup(*[mnm.Text(s,height=3.5,color='#aaffdd') for s in ss])
vg.arrange(mnm.RIGHT)
self.play(
mnm.FadeIn(vg),
run_time=1
)
หากมีการใส่คีย์เวิร์ด height แล้ว ทั้งคีย์เวิร์ด size และ font_size จะไม่มีผล เพราะขนาดของข้อความจะถูกกำหนดด้วยความสูงแทน
การปรับสีตัวหนังสือ
เรื่องการปรับสีนั้นได้เขียนถึงไปแล้วใน
บทที่ ๗ นั่นคือใช้คีย์เวิร์ด color หรือถ้าต้องการให้มีการไล่สีต่างไปในแต่ละตัวก็ใช้คีย์เวิร์ด gradient ได้
เช่น
import manimlib as mnm
class Manimala(mnm.Scene):
def construct(self):
text = mnm.Text('ก'*12,gradient=['#dfb9de','#445ba4'])
self.play(
text.animate.set_height(1),
run_time=1
)
ตัวหนังสือสามารถทำให้มีขอบได้โดยกำหนดค่า stroke_width และเพื่อให้สีพื้นต่างจากสีขอบให้ใส่สีพื้นด้วยคีย์เวิร์ด fill_color แยกจากสีขอบที่กำหนดด้วยคีย์เวิร์ด color
import manimlib as mnm
class Manimala(mnm.Scene):
def construct(self):
text = mnm.Text('มกร',color='#bfffb6',stroke_width=6,fill_color='#2e2c8b')
self.play(
text.animate.set_height(5),
run_time=1
)
การกำหนดฟอนต์
รูปแบบฟอนต์ของข้อความกำหนดได้โดยคีย์เวิร์ด font เช่น
import manimlib as mnm
class Manimala(mnm.Scene):
def construct(self):
abc = 'กขคงจabcde'
text1 = mnm.Text(abc,font='Tahoma',size=3)
text2 = mnm.Text(abc,font='Courier',size=3)
text3 = mnm.Text(abc,size=3)
vg = mnm.VGroup(text1,text2,text3)
vg.arrange(mnm.DOWN)
self.play(
mnm.FadeIn(vg),
run_time=0.5
)
self.wait(0.5)
สำหรับภาษาไทยแล้วบางฟอนต์อาจใช้แล้วมีปัญหา สำหรับในตอนนี้ที่มีปัญหาน้อยที่สุดคือฟอนต์ Tahoma ในที่นี้ก็จะยกตัวอย่างโดยใช้ฟอนต์นี้เป็นหลัก
การทำตัวเอียงตัวหนา
การทำตัวหนาทำได้โดยใส่คีย์เวิร์ด weight='BOLD' ส่วนตัวเอียงทำได้โดยใส่ slant='ITALIC'
เพียงแต่ว่าสำหรับภาษาไทยนั้นฟอนต์ส่วนใหญ่จะยังมีปัญหาในการทำตัวหนาและตัวเอียง ฟอนต์ที่แสดงผลได้โดยไม่มีปัญหาคือ Tahoma
ตัวอย่าง
import manimlib as mnm
class Manimala(mnm.Scene):
def construct(self):
text1 = mnm.Text('ไม่เอียงไม่หนา',font='Tahoma')
text2 = mnm.Text('ไม่เอียงแต่หนา',weight='BOLD',font='Tahoma')
text3 = mnm.Text('เอียงแต่ไม่หนา',slant='ITALIC',font='Tahoma')
text4 = mnm.Text('ทั้งเอียงทั้งหนา',slant='ITALIC',weight='BOLD',font='Tahoma')
vg = mnm.VGroup(text1,text2,text3,text4)
vg.arrange(mnm.DOWN)
vg.set_height(7)
self.play(
vg.animate.set_color('#63e9ce'),
run_time=1
)
การปรับสีเฉพาะบางส่วน
สามารถเลือกปรับสีเฉพาะบางส่วนของข้อความได้โดยใส่คีย์เวิร์ด t2c โดยใส่ดิกชันนารีของตัวอักษรคู่กับสีที่ต้องการ
สำหรับภาษาไทยอาจมีปัญหาเวลาใช้งานในส่วนนี้ แต่ถ้าใช้ฟอนต์ Tahoma จะไม่มีปัญหา
ตัวอย่าง
import manimlib as mnm
class Manimala(mnm.Scene):
def construct(self):
text = mnm.Text('ฉันเป็นศิษย์\n\nจอมปราชญ์\n\nจริงๆนะ',
font='Tahoma',
t2c={"น":'#ffaaaa',"ปราชญ์":'#aaaaff'})
self.play(
text.animate.set_height(7),
run_time=1
)
สามรถใช้เมธอด .set_color_by_t2c เพื่อตั้ง t2c ภายหลังได้ ซึ่งสามารถใช้กับ .animate เพื่อทำเป็นภาพเคลื่อนไหวได้
ตัวอย่าง
import manimlib as mnm
class Manimala(mnm.Scene):
def construct(self):
t2c = {'เกิดใหม่':'#c163e9','สไลม์':'#63c5e9'}
text = mnm.Text('เกิดใหม่ทั้งที\n\nก็เป็นสไลม์ไปซะแล้ว',font='Tahoma')
text.set_width(12)
self.play(
text.animate.set_color_by_t2c(t2c),
run_time=1
)
นอกจากนี้ยังอาจเปลี่ยนสีแค่บางส่วนได้โดยการระบุตำแหน่งที่ต้องการเปลี่ยนสี
ตัวอย่าง
import manimlib as mnm
class Manimala(mnm.Scene):
def construct(self):
text = mnm.Text('การล้างแค้นของ\n\nผู้กล้าโล่ผงาด',font='Tahoma')
text.set_width(12)
self.add(text)
self.play(
text[3:7].animate.set_color('#63d8e9'),
text[-4:].animate.set_color('#e9d863'),
run_time=1
)
การเปลี่ยนสีเฉพาะคำยังทำแบบไล่สีได้ด้วย โดยใช้คีย์เวิร์ด t2g แทน t2c ส่วนการตั้งสีภายหลังก็ทำได้โดยเมธอด .set_color_by_t2g ซึ่งวิธีใช้คล้ายกับเมธอด .set_color_by_t2c แค่จะได้เป็นตัวหนังสือไล่สี
ตัวอย่าง
import manimlib as mnm
class Manimala(mnm.Scene):
def construct(self):
t2g = {"ข้องใจเหรอ":['#ff9ad5','#a4ff9a']}
text = mnm.Text('ผู้กล้าโล่ผงาดแล้วไง\n\nข้องใจเหรอครับ?',font='Tahoma')
text.set_width(13)
self.play(
text.animate.set_color_by_t2g(t2g),
run_time=0.7
)
self.wait(0.3)
อ่านบทถัดไป >>
บทที่ ๑๗