Thread Rating:
  • 1 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
RMMV มาแก้ปัญหาภาษาไทยใน RPG Maker MV กันเถอะ (วรรณยุกต์ซ้อน, ปัญหาสระอำ, ญ/ฐ+สระอู)
#21
ข้อมูลเสริม
วิธีการแทนที่ตัวอักษรเป็นการพึ่งพาระบบ fallback ของวรรณยุกต์สูงต่ำและอักษรพิเศษ ซึ่งจะมีใน Truetype และ Opentype (ไม่ใช่ทุกตัว) โดยคาดหวังว่ามันจะอยู่ในตำแหน่ง Unicode ที่นิยมกัน
แต่ในความเป็นจริงไม่ใช่ว่าฟอนต์ไทยทุกฟอนต์จะมีอักษร fallback และบางฟอนต์ก็เอาอักษร fallback ไปไว้ที่ตำแหน่งอื่น (อย่างฟอนต์ สารบัญ รุ่นแรกๆ มีการเอาอักษรไปใส่ทับที่อักษรละตินเฉยเลย)

ดังนั้นวิธีที่ดีสุดคืออ่านค่าจากตาราง gsub และ gpos ของฟอนต์ เพื่อดูว่าตำแหน่งของวรรณยุกต์ควรอยู่ที่ไหน โดยดูจากค่า mark to base (mark) และ mark to mark (mkmk) และค่าอื่นๆเช่น kerning
ข้อมูลเพิ่มเติม => https://docs.microsoft.com/en-us/typogra...pment/thai

สาเหตุที่อักษรไทยในจุดอื่นๆ สามารถแสดงผลได้ถูกต้องเป็นเพราะ RMMV ใช้ webkit ซึ่งเขาได้ทำระบบมารองรับการอ่านค่าจากฟอนต์มาอยู่แล้ว แต่ Window Message เป็นกรณีพิเศษ เพราะต้องพิมพ์ตัวอักษรแบบ letter by letter เลยทำระบบของตัวเองออกมา

สรุปถ้าจะให้แสดงผลได้ถูกต้องจริงๆจึงควรเขียน script ที่อ่านข้อมูลจากฟอนต์ออกมาจริงๆ เช่น Harfbuzz (ปกติในเกมเอนจิ้นจะใช้ตัวนี้) มีแบบ javascript ด้วยนะ https://github.com/prezi/harfbuzz-js
ในการประมวลผลเพื่อให้ได้ Unicode ที่ถูกต้องจริงๆในฟอนต์นั้น รวมถึงการวางตำแหน่งวรรณยุกต์ว่ามีระดับความสูงเท่าไหร่

โดยปกติฟอนต์ทั่วๆไป (Truetype หรือ Opentype) จะมี fallback รองรับอยู่แล้ว ในตำแหน่งมาตรฐาน เลยลักไก่ด้วยการแทนที่ตัวอักษรแบบนั้นได้ แต่ไม่ใช่ทุกฟอนต์จะทำตามมาตรฐานนี้ เพราะมาตรฐานจริงๆก็คือให้อ่านค่าตามในฟอนต์ (โดยเฉพาะพวก Opentype)
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)