นี่ไม่ใช่บทช่วยสอนโดยละเอียดเกี่ยวกับ DirectX แต่เป็นคำอธิบายเกี่ยวกับวิธีใช้ DELPHI ในการพัฒนาเกม DirectX เนื่องจากหนังสือเกี่ยวกับ DirectX ไม่ว่าจะทางออนไลน์หรือในร้านหนังสือ โดยพื้นฐานแล้วจะอธิบายเกี่ยวกับการใช้ DELPHI ในการพัฒนาเกม จุดประสงค์ของบทความนี้น้อยมากคือเพื่อให้ผู้อ่านเรียนรู้วิธีใช้ข้อมูลที่มีอยู่เพื่อเรียนรู้และพัฒนาเกม
บทความนี้มีไว้สำหรับผู้อ่านที่มีความเข้าใจเกี่ยวกับ DirectX แต่ไม่รู้วิธีพัฒนาเกม DirectX ภายใต้ DELPHI
วัสดุอ้างอิงที่แนะนำ:
<<คู่มือการเขียนโปรแกรมเกม>>,<<คอลเลกชันภาษาจีน DirectX>>
DELPHI สามารถพัฒนาเกมได้หรือไม่?
คำตอบคือแน่นอน หลายๆ คนในฟอรัมเกมออนไลน์หลายแห่งเชื่อว่ามีเพียง C++ หรือ VC เท่านั้นที่สามารถนำมาใช้ในการพัฒนาเกมได้ DELPHI เหมาะสำหรับแอปพลิเคชันเดสก์ท็อปเท่านั้น ผู้ที่มีมุมมองเหล่านี้ควรถอดแยกชิ้นส่วนและดูโค้ดที่รวบรวมโดย DELPHI และ VC หรือดูเกม "Age of Miracles" ได้รับการพัฒนาด้วย DELPHI และกราฟิกดีกว่า Age of Empires.DELP HI เป็นแบบเชิงวัตถุอย่างสมบูรณ์ สามารถฝังแอสเซมบลี และรองรับคำสั่ง MMX (การลงทะเบียน MMX ใน DELPHI คือ mm0-mm7) จริงๆ แล้ว DELPHI เป็นเพียงเครื่องมือหนึ่งเท่านั้น ตราบใดที่คุณมีทักษะภายในที่ดี คุณก็สามารถทำให้มันเป็นโปรแกรมหรือเกมที่ดีได้
การตระเตรียม:
ขณะนี้มีสองตัวเลือกสำหรับการพัฒนาเกม DirectX ด้วย DELPHI หนึ่งคือการใช้การประกาศ DirectX ของเจได (http://www.delphi-jedi.org) อีกทางหนึ่งคือการใช้ตัวควบคุม DelphiX ที่นี่เราจะใช้ DirectX ของเจได แพ็คเกจการประกาศ X ใช้ในการพัฒนาเกม DirectX เหตุผลที่ฉันเลือกแพ็คเกจการประกาศ DirectX เป็นเพราะใช้วิธี SDK ในการพัฒนาเกมหากฉันต้องการเปลี่ยนไปใช้ภาษาอื่นในอนาคตฉันก็ไม่จำเป็นต้องทำ เรียนรู้ DirectX อีกครั้ง สำหรับการควบคุม DelphiX ฉันไม่เคยใช้มันและไม่ได้พูดอะไรเลย แต่ฉันไม่ได้ใช้ผลิตภัณฑ์ของญี่ปุ่น ;-)
ขั้นแรก ไปที่ที่อยู่ต่อไปนี้เพื่อดาวน์โหลดแพ็คเกจการประกาศ DirectX (http://kuga.51.net/download/files/directx7.rar) และแตกไฟล์ไปยังไดเร็กทอรีที่คุณกำหนดเอง จากนั้นเลือก Tools->Environment Options ใน DELPHI เลือกแท็บ Library ในหน้าต่างที่เปิดอยู่ แล้วคลิกปุ่มด้านหลัง Library Path หน้าต่าง Directories จะปรากฏขึ้น จากนั้นคลิก รายการที่เป็นสีเทาแสดงว่าไม่ถูกต้อง ที่ด้านขวาของเส้นทาง เลือกไดเร็กทอรีที่จะแยกการประกาศ DirectX จากนั้นคลิกปุ่ม ADD เพื่อเพิ่มไดเร็กทอรีที่มีการประกาศ DirectX ไปยังเส้นทางไลบรารีของ DELPHI คุณสามารถอ้างอิงหน่วยได้โดยตรงในการประกาศ DirectX ในการใช้งาน ประกาศนี้ แพ็คเกจมาพร้อมกับตัวอย่างมากมายที่สามารถใช้เป็นข้อมูลอ้างอิงในการเริ่มต้น
ประสบการณ์การดีบัก:
เมื่อพัฒนาเกมแบบเต็มหน้าจอ วิธีที่ดีที่สุดคือตั้งค่าความละเอียดของหน้าจอในระหว่างการออกแบบให้มีความละเอียดเดียวกันกับเกม เพื่อหลีกเลี่ยงไม่ให้หน้าจอเสียหายโดยการสลับความละเอียดบ่อยครั้งในระหว่างการดีบัก
วิธีที่ดีที่สุดคือพัฒนาเกมแบบเต็มหน้าจอภายใต้ WIN2000/XP มิฉะนั้น เมื่อทำการดีบั๊กต่ำกว่า 98 เกมจะเข้าสู่ลูปไม่สิ้นสุด ไม่เช่นนั้นเครื่องจะพังได้ง่ายเมื่อเกมแบบเต็มหน้าจอเข้าสู่ลูปไม่สิ้นสุด ต่ำกว่า 2000/XP คุณสามารถกด ALT+ TAB สลับไปที่ DELPHI ได้ (แต่ขณะนี้ เนื่องจากเกม DirectX แสดงผลเต็มหน้าจอและเต็มหน้าจอ จึงไม่มีการเปลี่ยนแปลงใดๆ บนหน้าจอ ดังนั้นคุณต้องลองอีกครั้ง) กด CTRL+F2 เพื่อจบเกม หากพบความผิดปกติ ให้สลับไปที่ DELPHI และ กด Enter ก่อนแล้วกด CTRL + F2 เพื่อสิ้นสุดเกมการดีบัก
สังเกต:
หากคุณใช้ DELPHI7 โปรดเปลี่ยนบรรทัด 145 {$IFDEF VER140} ใน DirectDraw.pas เป็น {$IFDEF VER150} สำหรับการรวบรวมและการตีความตามปกติ
ควรใช้ API เพื่อสร้างหน้าต่างเกมหลักแทนการใช้คลาส TFORM ของ VCL
ขั้นแรก เรามาดูข้อมูลโค้ดที่เตรียมใช้งานออบเจ็กต์ DirectDraw โดยใช้ C++ และ DELPHI
เวอร์ชัน c++:
BOOL InitDDraw( )
-
LPDIRECTDRAW7 lpDD; //ชี้ไปที่วัตถุ DirectDraw
ถ้า (DirectDrawCreateEx (NULL, (เป็นโมฆะ **)&lpDD, IID_IDirectDraw7, NULL) != DD_OK )
กลับ FALSE; {สร้างวัตถุ DirectDraw}
{เมธอด if (xxx != DD_OK) ใช้สำหรับการตรวจจับข้อผิดพลาด ซึ่งเป็นวิธีการที่ใช้บ่อยที่สุด}
ถ้า (lpDD->SetCoOperativeLevel(hwnd,DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN) != DD_OK )
กลับ FALSE; {ตั้งค่าระดับการควบคุม DirectDraw}
ถ้า ( lpDD->SetDisplayMode( 640, 480, 32, 0, DDSDM_STANDARDVGAMODE ) != DD_OK )
กลับ FALSE; {ตั้งค่าโหมดการแสดงผล}
-
รุ่นเดลฟี:
ฟังก์ชัน TForm1.InitDirectDraw: บูลีน;
var
lpDD: IDirectDraw7;
เริ่ม
ผลลัพธ์ := False; {ถือว่าการเริ่มต้นล้มเหลว}
{สร้างวัตถุ DirectDraw}
ถ้า DirectDrawCreateEx(ไม่มี, lpDD, IID_IDIRECTDRAW7, ไม่มี) <> DD_OK แล้ว
ออก;
{ตั้งค่าระดับการควบคุมของ DirectDraw พารามิเตอร์แรกคือหมายเลขอ้างอิงของหน้าต่าง DirectDraw ที่นี่ระดับการควบคุมถูกตั้งค่าเป็นแบบเต็มหน้าจอพร้อมโหมดพิเศษ}
ถ้า lpDD.SetCooperativeLevel(Hwnd, DDSCL_EXCLUSIVE หรือ DDSCL_FULLSCREEN) <> DD_OK แล้ว
ออก;
{ตั้งค่าโหมดการแสดงผล พารามิเตอร์ตัวแรกและตัวที่สองคือความละเอียด พารามิเตอร์ตัวที่สามใช้เพื่อตั้งค่าจำนวนหลักสีในโหมดการแสดงผล
พารามิเตอร์ที่สี่ตั้งค่าอัตราการรีเฟรชของหน้าจอ 0 คือค่าเริ่มต้น ค่าที่ถูกต้องเพียงค่าเดียวของพารามิเตอร์ที่สี่คือ DDSDM_STANDARDVGAMODE}
ถ้า lpDD.SetDisplayMode(640, 480, 32, 0, DDSDM_STANDARDVGAMODE) <> DD_OK แล้ว
ออก;
ผลลัพธ์ := จริง;
จบ;
จะเห็นได้ว่าโค้ดทั้งสองนี้เหมือนกันทุกประการ ยกเว้นชื่อไวยากรณ์และออบเจ็กต์ ตราบใดที่เราเข้าใจสิ่งนี้ เราก็สามารถอ้างถึงข้อมูล VC หรือ C++ แล้วใช้ DELPHI เพื่อสร้างเกมของเราเอง การประกาศ DirectX ใน DELPHI ชื่อ ชื่อโครงสร้าง และ VC จะแตกต่างกัน ลักษณะทั่วไปจะเป็นดังนี้:
เดลฟี วีซี
วัตถุ DirectDrawIDirectDraw7 LPDIRECTDRAW7
วัตถุเพจ IDirectDrawSurface7 LPDIRECTDRAWSURFACE7
คำอธิบายหน้า DirectDraw TDSurfaceDesc2 DDSURFACEDESC2
โดยพื้นฐานแล้ว เฉพาะคำนำหน้าเท่านั้นที่แตกต่างกัน เนื่องจากพื้นที่ จึงไม่แสดงรายการวัตถุและโครงสร้างทั้งหมดไว้ที่นี่