TDX เป็นการเขียนโค้ดเกมเพื่อสร้างเป็นสภาพแวดล้อมเพื่อให้การพัฒนาเกมแบบ 2D ทําได้ง่ายขึ้น TDX เป็นการรวมชุดคําสั่งที่ใช้ในการ Load ภาพ, เสียง และโหลดหน้าจอเกมต่างๆ โดยเขียนขึ้นมาในรูปแบบของกลุ่มฟังก์ชั่น และกลุ่มของคลาสที่จะทํางานร่วมกัน

การเขียนเกม 2D ด้วย DirectX นั้น การเขียนโค้ดโหลดภาพ เสียง และเข้าสู่สถานะของการเชื่อมต่อทางเครือข่ายนั้น ถ้าเขียนโค้ดเองก็จะยาวมาก ดังนั้น CDX จึงออกแบบมาเพื่อให้เขียนโค้ดในกา่รโหลดภาพง่ายขึ้น CDX เป็นแค่คลาส (Class) ที่ออกแบบมาเพื่อครอบการทํางานของ DirectDraw อีกทีหนึ่ง ดังนั้น การใช้ CDX จึงเป็นแค่การใช้ในการตอนการพัฒนาเท่านั้น โปรแกรมเกมที่ได้ออกมานั้นจะทํางานบน DirectX ได้ตามปกติ ดังนั้น CDX จึงใช้แค่ในขั้นตอนการพัฒนาเกมเท่านั้น ไม่ได้นําไปใช้ในขั้นตอนของการรันเกม เพราะ CDX ประกอบด้วยไฟล์ .h และไฟล์ .lib ซึ่งเป็น Static Library ดังนั้น ไฟล์ .exe ที่ได้ออกมานั้น จะไม่มีส่วนประกอบของ CDX (เพราะมันเป็นแค่ชุดคําสั่งคลาส) การรันโปรแกรมเกม จึงรันได้บน DirectX ทั่วๆ ไป เพราะฉะนั้น การที่มีบางท่านเข้าใจว่า การเขียนเกมด้วย CDX นั้นเป็นเอนจิ้นอีกตัวหนึ่งนอกจาก DirectX นั้นจริงๆ แล้วไม่ใช่เช่นนั้น CDX เป็นแค่คลาสที่ครอบชุดคําสั่ง DirectX เพื่อให้เขียนเกมได้ง่ายขึ้นเท่านั้น

CDX ออกแบบมาเพื่อครอบ DirectDraw, DirectInput แต่ตัว DirectPlay นั้นยังไม่ได้ถูกรวมไปด้วย Webmaster จึงได้ออกแบบชุดคําสั่ง TDX นี้ออกมาใหม่ เพื่อให้ครอบการทํางานของ CDX ให้รวบรัด และให้เป็นคลาสที่ทํางานเบ็ดเสร็จในตัวมากขึ้น คือ แทนที่จะเขียนโปรแกรมกันหลายๆ บรรทัดในการโหลดภาพ หรือทําภาพเคลื่อนไหว ถ้าใช้ TDX โค้ดก็จะสั้นลง และหากท่านเขียนโค้ดด้วย CDX มาก่อน ท่านก็นํามาใช้บน TDX นี้ได้เลย

TDX เป็น Project ต้นแบบของเกม ที่ครอบการทํางานของ CDX (ที่มันครอบ DirectDraw, DirectInput) อีกที และนอกจากนี้ TDX ยังสร้่างฟังก์ชั่นและคลาสเพื่อรองรับการทํางานด้านต่างๆ เอาไว้อีกหลายตัว ซึ่งจะพัฒนาขึ้นไปตามลําดับ

ลองดูการเปรียบเทียบความสั้นยาวของโค้ดโปรแกรม

ตัวอย่างโค้ดของ CDX ในการโหลดภาพ

CDXSprite *sp;
..................
sp=new CDXSprite();
sp->Create(Screen,"misile.bmp",26,33,CDXMEM_VIDTHENSYS);
sp->SetColorKey();

ตัวอย่างการโหลดภาพของ TDX โดยใช้คลาส TDXsprite

TDXsprite s,s2;
.............................
s.LoadBitmap("misile.bmp",26,33);
s.SetPos(100,100);

s2.LoadBitmap("invad_1.bmp",100,100);
s2.SetPos(200,300);

ตัวอย่างการโหลดไฟล์เสียง midi และ wav ใน TDX

void Init()
{

TDXloadmidi(0,"won.mid");
TDXloadmidi(1,"lost.mid");
TDXloadmidi(2,"x-files.mid");

TDXloadwav(0,"skid.wav");
TDXloadwav(1,"type.wav");
TDXloadwav(2,"siren.wav");
TDXloadwav(3,"puck.wav");

return TRUE;

}

void GamePlay()
{

TDXupdateinput();
TDXclearscreen(0);

TDXplaymidi(1,true);

}

ความรวบรัดของคลาส และฟังก์ชั่นต่างๆ ของ TDX เวอร์ชั่นนี้ มีดังนี้

Version 1.0

  • Project มี 4 ฟังก์ชั่นหลักๆ คือ Init, EndGame, GamePlay และ WinProc
  • ผู้เขียนโปรแกรมกําหนดขนาดของหน้าจอเกมได้เอง แต่รันเป็นแบบหน้าต่างเท่านั้น
  • เกมจะมีเมาส์เป็นส่วนประกอบ โดยใช้ฟังก์ชั่น TDXloadmouse("images/pointer.bmp",25,25);
  • เกมสามารถ debug โดยแสดงข้อความ debug ได้ที่หน้าจอเกม โดยเขียนโค้ดกําหนดค่าในฟังก์ชั่น Init
  • ถ้าต้องการดีบักโปรแกรม ก็จะใช้ฟังก์ชั่น DEBUG("Level = %d",m_level);
  • แสดง/ซ่อนตําแหน่งของตัวชี้เมาส์ได้ TDXshowcursorposition(true);
  • โหลดเสียง wav สั่งเล่นแบบวน, เล่นครั้งเดียว และสั่งหยุดพร้อมๆ กันได้ ฟังก์ชั่นที่ใช้ก็คือ TDXloadwav, TDXplaywav และ TDXstopwav
  • โหลดเสียงเพลง midi สั่งเล่นแบบวน, เล่นครั้งเดียว และสั่งหยุดพร้อมๆ กันได้ ฟังก์ชั่นที่ใช้ก็คือ TDXloadmidi, TDXplaymidi และ TDXstopmidi
  • สามารถใช้ CDXSprite, CDXSurface และเรียกใช้ object ของ CDXScreen ได้จาก Project โดยตรง
  • คลาสที่รองรับการทํางานของ Sprite ก็คือ TDXsprite
  • คลาสที่ใช้รองรับการทํา GUI ในเกมก็คือ TDXtextbox, TDXcheckbox และ TDXbutton
  • คลาส Linked List แบบ Template พร้อม TDXlinkedlist< class TYPE >
  • คลาสที่ใช้โหลด Background พื้นหลัง และทําตารางแบบ Matrice TDXbackground
  • รองรับการใช้ WM_TIMER ซึ่งได้มีการเขียนเงื่อนไขรอรับการทํา Timer เอาไว้ให้แล้ว
  • ผู้เีขียนสามารถโหลดภาพโดยใช้คลาส CDXSprite ได้เหมือนเดิม และทํางานร่วมกับ TDXsprite ได้ในเวลาที่ต้องการตรวจจับการชนกัน

ดูตัวอย่างวิธีการได้ใน TDX Tutorial

 


TDX
By Thaidev.com