องค์ประกอบของ XNA

XNA ประกอบด้วย 2 ส่วนหลัก

  1. XNA Game Studio Express
    หมายถึง IDE และเครื่องมือที่ใช้ในการพัฒนาเกมทั้งหมด
  2. XNA Framework
    หมายถึง library ที่ใช้ในการพัฒนาเกม ซึ่งเป็น dll ที่เขียนด้วยภาษา C#

XNA Framework มีองค์ประกอบเป็นชั้นๆ (Layers) ดังนี้

  • Platform - เป็นชั้นล่างสุดของโครงสร้างของ XNA เป็น low-level native and managed API สำหรับ XNA framework ทั้งหมดเรียกใช้ ส่วนนี้ทำหน้าที่ติดต่อกับฮาร์ดแวร์หรือตัวกลาง เช่น Direct3D, XACT, XInput และ XContent
  • Core Framework - เป็นส่วนที่ทำหน้าที่หลัก (core functionality) เช่น Managed DirectX ส่วนนี้แบ่งการทำงานเป็นกลุ่ม คือ Graphics, Audio, Input, Math และ Storage ส่วนของ XNA อื่นๆคือการขยายการทำงานจากส่วนนี้
  • Extended Framework - เป็นส่วนที่ช่วยอำนวยความสะดวกสำหรับการพัฒนาเกม ในเวอร์ชั่นแรกของ XNA ส่วนนี้ประกอบด้วย Application Model และ Content Pipeline ซึ่งไมโครซอฟต์มีแผนจะเพิ่มส่วนนี้อีกในอนาคต
  • Game - คือตัวเกมเอง ประกอบด้วย code และ content รวมทั้ง starter kits, templates และ game component

หรืออาจแบ่งองค์ประกอบของ XNA Framework อย่างง่ายๆตาม dll ได้ดังนี้

  • XNA Framework Engine - อยู่ใน Microsoft.Xna.Framework.dll
  • XNA Game Application Model - อยู่ใน Microsoft.Xna.Framework.Game.dll
  • XNA Content Pipeline - อยู่ใน Microsoft.Xna.Framework.Content.Pipeline.dlls

Dll เหล่านี้เขียนโดยใช้ C# ซึ่งเป็น managed code จึงสามารถใช้โปรแกรม class browser เช่น Reflection for .NET เปิดดูการทำงานของ dll ได้ ซึ่งจะเห็นว่าการทำงานส่วนใหญ่คือการเรียกใช้ DirectX นั่นเอง (ยกเว้นส่วน content pipeline)

รายละเอียดขององค์ประกอบที่สำคัญมีดังนี้

Application Model
เป็นส่วนที่ทำให้นักพัฒนาไม่ต้องกังวลถึง platform ที่กำลังเล่นอยู่ ส่วนนี้จะทำหน้าที่จัดการเรื่อง window, message pump, timer or clock, รวมทั้งการจัดการ GraphicsComponent และ Graphics Device นักพัฒนาจึงไม่ต้องสนใจความแตกต่างของ PC และ XBos ยกเว้นในเกมที่ต้องการคุณสมบัติเฉพาะของเครื่องเท่านั้น และสามารถประกอบเกมขึ้นจาก GameComponents ได้ด้วย (เรียกส่วนนี้ว่า Componet Model) ซึ่งทำให้การสร้างเกมง่ายขึ้น และสามารถสร้าง reusable component ไว้ใช้ได้ด้วย ส่วนนี้เป็นสิ่งที่ไมโครซอฟต์มีความคาดหวังว่าตลาดจะโตมาก

Graphics
XNA พัฒนาส่วนกราฟฟิกจาก DirectX 9.0 โดยได้ตัดเอา Fixed-function pipeline ทิ้งไปเนื่องจากต้องการให้เกมใน PC version นั้น full compaitible กับ Xbox 360 version จึงมีแต่ shader-driven programmable pipeline ให้ใช้เท่านั้น ซึ่ง XNA จำเป็นต้องทำให้การใช้งาน shaders และ effects ง่ายขึ้นมากโดยมี BasicEffect ซึ่งเป็นการใช้ shader แบบง่ายๆโดยไม่ต้องมีความรู้เรื่อง shader เมือนักพัฒนาคุ้นเคยขึ้นก็สามารถใช้ shader แบบเต็มรูปแบบได้ต่อไป (DirectX 10 เองก็มีแต่ shader-driven pipeline เหมือนกัน)

Audio
ด้านของเสียง XNA สร้างขึ้นจาก XACT ซึ่งเป็น cross-platform audio API สำหรับ Windows กับ Xbox ของไมโครซอฟต์เอง XACT ใช้ concept คล้ายกับ shaders ใน Direct3D คือ นักพัฒนาเสียงจะสร้างเสียงไว้เป็น package ซึ่งมีรายละเอียดบรรจุครบถ้วน เช่น volume, looping, channel mixing (including 5.1) ฯลฯ แล้วโปรแกรมเมอร์เรียกใช้จากชื่อ package โดยไม่ต้องคำนึงถึงรายละเอียดด้านฮาร์ดแวร์เลย

Input
ส่วนนี้สร้างขึ้นจาก XInput ซึ่งก็เป็น cross-platofrm API สำหรับ common controller โดยทำงานแบบ immediate mode API ไม่ต้องมีการ initiialization ไม่ต้องยุ่งกับรายละเอียดการคุมฮาร์ดแวร์ เพียงแค่เรียกคำสั่ง GetState จาก GamePad, Keyboard และ Mouse ก็ใช้ได้เลย

Storage
เป็นส่วนสำหรับเก็บข้อมูลเกม (save games, high scores etc) ใน Xbox 360 จะเก็บสถานะของเกม (Game state) ไว้กับ profile และ storage device (hard drive หรือ memory unit) XNA มีส่วนนี้ emulate ให้ทำงานบนพีซีเหมือนใน Xbox จึงสามารถใช้ code ร่วมกันได้เลย

Math
XNA มีความสามารถทางคณิตศาสตร์ที่จำเป็นสำหรับเกม เช่น Vector2, Vector3, Vector4, Matrix, Plane, Ray เป็นต้น รวมถึง bounding volume เช่น BoundingBox, BoundingSphere และ BoundingFrustum ซึ่งสามารถคำนวณ intersection และ containment test ได้ ที่ต้องสังเกตคือ Math ทั้งหมดเป็น right-handed เพื่อให้ไม่ต้องทำ function ให้เป็นสองชุดจึงสะดวกต่อการสร้าง content ตลอดจนการใช้ middleware ด้วย (แต่ถ้าต้องการจริงๆ ก็เรียก Left-handded API ได้ด้วย)

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