เริ่มต้นการเขียนเกมด้วย C++ และ DirectX

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

ความหมายของ c++ และ DirectX
C++ เป็นภาษาในการเขียนโปรแกรมภาษาหนึ่ง ที่พัฒนามาจากภาษา C โดยเพิ่มเติมคำสั่ง (ศัพท์สงวน) ที่เกี่ยว oop (object oriented programming ) เข้าไป ซึ่งจากเดิมเป็นการเขียนแบบ structure programming ที่มีการทำงานแบบจากบนลงล่าง เริ่มต้น และทำงานต่อไปเรื่อย ๆ จนจบ แต่การเขียนแบบ oop นั้นมองว่า เราเขียนเพื่อสร้างวัตถุขึ้นมา แล้วให้วัตถุนั้นทำงานในของมัน โดยที่วัตถุต่าง ๆ ที่เราสร้างขึ้นสามารถมีความสัมพันธุ์ต่อกันได้
ในการเขียนโปรแกรมด้วยภาษา C++ นั้น ผมใช้ IDE ของ Microsoft ชื่อว่า Visual C++ 2010 นะครับ ลองอ่านเงื่อนไข และดาวน์โหลดได้จากเวปไซต์ของ Microsoft นะครับ
ส่วน DirectX เป็น SDK ที่ใช้ในการเขียนเกม ตอนนี้ (ค.ศ. 2014) มีถึงเวอร์ชั่น 11 แล้ว แต่เราศึกษาด้วยเวอร์ชั่น 9.0c ได้ครับ (หลายเกมก็ยังใช้ตัว 9.0c อยู่) สามารถเข้าไปดาวน์โหลดในเวปไซต์ของ Microsoft ได้เช่นกัน (โหลดตัว SDK มานะครับ)
ในตัว DirectX เอง จะแบ่งออกเป็นส่วนต่าง ๆ หลาย ๆ ส่วน ตามความจำเป็นในการใช้งานในเกมนะครับ เช่น Direct Input , Direct 3D หรือ Direct Play ทั้งนี้เจ้าตัว DirectX เองมันเป็นตัวกลางให้เราในการต่างเกี่ยวกับอุปกรณ์ต่างให้ เช่น Direct input ก็จะเกี่ยวกับการใช้อุปกรณ์ input ต่าง ๆ เช่น keyboard , mouse และ joy stick หากมีอุปกรณ์ใหม่ ๆ เช่น keyboard ที่มีปุ่มเยอะขึ้น เราไม่จำเป็นต้องเขียนโปรแกรมเพื่อเรียกใช้ library ที่มีมาใน Driver ของอุปกรณ์เอง ขอให้มันสามารถทำงาน support กับ DirectX เหมือนเดิมเราก็ยังใช้โปรแกรมเดิมทำงานได้อยู่

โปรแกรมต่าง ๆ ใน DirectX เบื้องต้น
หน่วยเหล่านี้มีความจำเป็นในการเขียนเกมครับ เราจำต้องเรียกใช้เพื่อให้มันง่ายต่อการติดต่ออุปกรณ์ และการทำงานต่าง ๆ

  • Direct 3D เป็นส่วนของการแสดงผลแบบ 3 มิตินั่นเอง สมัยก่อนมีหน่วยที่มีการแสดงผลแบบ 2 มิติมาให้ด้วย ชื่อว่า Direct draw แต่ว่าปัจจุบันไม่มีแล้วครับ มันถูกรวมกับ Direct 3D แล้ว เพราะว่าการทำงานแบบ 2 มิตินั้น มีความสำคัญในการทำเกมแบบ 3 มิติ ด้วย เขาเลยรวมมาเป็นตัวเดียวกัน
  • Direct Input เป็นส่วนของการรับข้อมูลในเกม เช่นจาก key board , mouse และ joy stick
  • Direct Sound เป็นส่วนของการเล่นเสียงและเพลงต่าง ๆ

*ผมเลือกเอามาเฉพาะที่จำเป็นนะครับ ตัวอื่น ๆ สามารถศึกษาได้จากเวปไซต์ของ Microsoft ครับ

การลงโปรแกรม VC++ และ DirectX
ขั้นตอนนี้ สามารถดูรายละเอียดในการลงจากเวปไซต์ Microsoft นะครับ แต่ในส่วนนี้ผมจะแนะนำส่วนสำคัญให้เท่านั้นนะ
หลังจากที่เราลงโปรแกรม VC++ แล้ว และ ลงตัว DirectX SDK แล้ว ให้ลองเปิดโปรแกรม VC++ ขึ้นมา และสร้าง project ขึ้นมา 1 อัน โดยสร้างเป็นแบบ win32 ก็ได้ครับ เมื่อสร้างมาแล้ว ให้เข้าไปที่ project (อยู่ที่วิวทางด้านซ้าย ที่ชื่อว่า solution explorer) แล้ว click ขวา เลือก property ในส่วนนี้จะเป็นรายละเอียดของ project ที่เราสร้าง เลือกที่ configuration property เลือกในหัวข้อ VC++ Directory
จากนั้นรายละเอียดทางขวาจะปรากฎ directory ต่าง ๆ ที่จะถูกเรียกใช้ในการค้นหา file ต่าง ๆ ในการ compile โปรแกรม
ในหัวข้อ Include Directories ให้เราดูว่ามีการเรียก path ของ DirectX ที่เป็น include file ไว้หรือไม่ (ส่วนใหญ่เป็น header ไฟล์นะครับ) ข้อมูลในนั้นควรเป็น folder include ที่อยู่ใน DirectX SDK folder
ในหัวข้อ Library Directories ในข้อมูลควรจะมี lib folder ของ DirectX ที่อยู่ใน DirectX SDK folder ในเครื่องผมจะเรียกที่ x86 folder นะครับ ใครอยากลองเขียนแบบ 64 bit ก็ไปลองกันทีหลังนะครับ
ยังมีส่วนหนึ่งที่ผมเคยเจอข้อผิดพลาดกันบ้าง เช่น ไม่สามารถเรียก library ของ DirectX บางตัวได้ อันนี้ผมแก้โดยการเอาชื่อไฟล์ตัวนั้นไปเพิ่มในการโหลดอีกที
วิธีการคือ เข้าไปใน project property แล้วเลือกที่ configuration property เลือกหัวของ Linker เลือกที่ input ในข้อมูลจะช่องให้กรอก Additional Dependencies แล้วเลือก file ที่มันฟ้อง error ในขณะ compile โปรแกรมเข้าไป เข้าใจว่า ในตัว DirectX 9.0c นั้นก็มีโปรแกรมเก่า ๆ ที่ยังใช้งานได้อยุ่จากเวอร์ชั่นเก่า ๆ แต่มันอาจจะหาไฟล์ไม่เจอนะครับ ซึ่งถ้าใครใช้ source code ตัวใหม่ใน DirectX เวอร์ชั่นใหม่ อาจจะไม่เจอปัญหานี้นะครับ

ในเนื้อหาต่อไป เราจะพูดถึง code ที่ต้องเขียนเพื่อสร้างโปรแกรม สร้าง window 1 ตัว และเรียกใช้ DirectX กันนะครับ

บันทึกนี้เขียนที่ GotoKnow โดย  ใน การเขียนเกมด้วย DirectX



ความเห็น (0)