การเขียนโปรแกรมเกม: วิธีการทั่วไปและรูปแบบการออกแบบ [ปิด]


9

ฉันเริ่มเขียนโปรแกรมเกมที่ง่ายมาก ๆ เพื่อที่ฉันจะได้เรียนรู้ OpenGL 3.x ได้ดีขึ้น แต่เนื่องจากฉันไม่มีประสบการณ์และความรู้ที่กระจัดกระจายเกี่ยวกับวิธีการออกแบบเกม 3 มิติฉันมักจะเจอปัญหาที่ฉันรู้ว่าฉันควรออกแบบชั้นเรียนของฉัน ต่างกัน ปัญหาอื่น ๆ ที่ฉันกำลังเผชิญคือวิธีการติดตามเวลาอย่างกระชับในเกมและอัปเดตการเคลื่อนไหวตามต้องการและวิธีบอกตัวแสดงผลว่าต้องมีการวาดใหม่ นอกจากนี้ฉันยังต้องทำให้ฟังก์ชั่นรับและตั้งค่าสำหรับการส่งค่าสถานะต่าง ๆ จากวัตถุหนึ่งไปยังวัตถุอื่นนั่นคือการปฏิบัติที่ไม่ดีหรือไม่?

ดังนั้นตามที่ชื่อบอกว่าฉันสนใจหนังสือหรือบทความ / บทช่วยสอนและแหล่งข้อมูลใด ๆ ที่สามารถช่วยฉันได้และจะอธิบายรูปแบบการออกแบบทั่วไปบางอย่างในการออกแบบเกม (เช่นตัวจัดการสถานะเกมแบบอักษร ฯลฯ )

Btw ฉันยังคงใช้ freeglut คุณจะแนะนำให้ฉันย้ายไปที่ระบบหน้าต่างที่ดีขึ้นก่อนที่จะดำเนินการต่อหรือหลังจากที่ฉันเข้าใจ OpenGL ดีขึ้นหรือไม่


12
มาตรฐาน "ฉันกำลังเขียนเอ็นจิน" การตอบสนอง = เขียนเกมไม่ใช่เอ็นจิ้น เครื่องยนต์เป็นหลุมกระต่ายลึกที่ตกลงไป คุณทำวิจัยอะไรจนถึงตอนนี้? ที่นี่คุณจะได้รับผลลัพธ์ที่ดีที่สุดโดยเลือกประเด็นปัญหาที่มุ่งเน้นและค้นหาคำถามที่ผ่านมา ค้นหาประเด็นใหม่ ๆ ต่อไปขณะที่เขียนเกมของคุณครั้งละหนึ่งเรื่อง จากการสังเกตด้านข้างการตระหนักว่าคลาสต้องมีการออกแบบใหม่เป็นเรื่องปกติและกระบวนการในการทำที่เรียกว่า "การปรับโครงสร้าง" หมายความว่าคุณกำลังเรียนรู้เมื่อคุณไปและนั่นเป็นสิ่งที่ดี
Patrick Hughes

1
ขอบคุณสำหรับคำตอบของคุณ ขออภัยถ้าฉันยังไม่ชัดเจนฉันไม่ต้องการสร้างเอ็นจิ้นเกมเต็มรูปแบบ แต่ฉันต้องการเรียนรู้รูปแบบการออกแบบพื้นฐานบางอย่างที่ใช้ในการออกแบบเกมเพื่อให้ฉันออกแบบชั้นเรียนได้ดีขึ้น ฉันเดาว่าควรจะมีวิธีแก้ไขปัญหาทั่วไปที่พบได้บ่อย ยิ่งฉันเข้าไปในการออกแบบมากเท่าไหร่ปัญหาก็ยิ่งเกิดขึ้นและยิ่งหาคำตอบได้ยากขึ้น การวิจัยของฉันจนถึงตอนนี้ยังไม่ได้ผลมากนักฉันพบบทเรียนที่ดีซึ่งลึกเข้าไปในรายรับของเกมคือcodeproject.com/Articles/27219/ codeproject.com/Articles/27219/...
Grieverheart

1
ฉันเห็นว่าการใส่ "วิธีการทั่วไปของเครื่องมือเกม" ในส่วนหัวมีแนวโน้มที่จะนำไปสู่การอภิปรายต่อ ... เครื่องยนต์ =) ไม่ว่าในกรณีใดเหตุผลที่คุณพบว่ามันยากที่จะหาสิ่งที่คุณกำลังมองหาอยู่ก็คือ เกมประเภทต่าง ๆ เนื่องจากมีหลายปีในปฏิทินของชาวมายันและแต่ละประเภทมีความต้องการของตัวเอง คุณอาจได้ผลลัพธ์ที่ดีกว่าหากคุณมองหาเกมประเภทใดประเภทหนึ่งโดยเฉพาะนักกีฬาคนแรกนั้นเป็นเรื่องธรรมดามาก
Patrick Hughes

สไตล์ FPS หรือบริการข้ามแดนอัตโนมัติจะเป็นสิ่งที่ฉันกำลังมองหา ในสาระสำคัญฉันต้องการสร้างโลกที่ฉันสามารถทดลองกับกราฟิกและเทคนิคการเคลื่อนไหวต่าง ๆ ฉันมีกล้องและการเคลื่อนไหวขั้นพื้นฐานอยู่แล้วเช่นการกระโดดและ strafing และการโหลดแบบจำลอง แต่มันก็ไม่ถนัดนักเช่นฉันใส่อนิเมชั่นการเดินเข้าไปในชั้นเรียนของกล้องและฉันใช้ตัวแปรภายในเพื่อนับเฟรม ฉันเป็นส่วนใหญ่ปะหลุมและไม่ได้ผลิตอะไรที่แข็งแกร่ง ฉันคิดว่านั่นเป็นส่วนหนึ่งของกระบวนการเรียนรู้และบางทีฉันก็พยายามจะเคลื่อนไหวเร็วเกินไป
Grieverheart

3
เกมการเข้ารหัสที่สมบูรณ์สถาปัตยกรรมเครื่องยนต์เกมเป็นหนังสือสองเล่มที่เกี่ยวกับเกมการเข้ารหัสคุณจะได้รับภาพรวมทั่วไปของโครงการพัฒนาและเทคโนโลยีพื้นฐานที่พวกเขาสัมผัสกับนิด ๆ หน่อย ๆ ของทุกอย่าง
dreta

คำตอบ:


11

ฉันจะเขียนคำตอบที่เหมาะสมตั้งแต่ฉันอยู่ที่เวทีของคุณประมาณ 2 เดือนที่ผ่านมา

ฉันเริ่มเขียนโปรแกรมเกมที่ง่ายมากเพื่อให้ฉันสามารถเรียนรู้ OpenGL 3.x ได้ดีขึ้น แต่เนื่องจากฉันไม่มีประสบการณ์และความรู้ที่กระจัดกระจายเกี่ยวกับวิธีการออกแบบเกม 3 มิติฉันมักจะเจอปัญหาที่ฉันรู้ว่าฉันควรออกแบบชั้นเรียนของฉัน ต่างกัน

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

ปัญหาอื่น ๆ ที่ฉันกำลังเผชิญคือวิธีการติดตามเวลาอย่างกระชับในเกมและอัปเดตการเคลื่อนไหวตามต้องการและวิธีบอกตัวแสดงผลว่าต้องมีการวาดใหม่

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

นอกจากนี้ฉันยังต้องทำให้ฟังก์ชั่นรับและตั้งค่าสำหรับการส่งค่าสถานะต่าง ๆ จากวัตถุหนึ่งไปยังวัตถุอื่นนั่นคือการปฏิบัติที่ไม่ดีหรือไม่?

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

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

บทความและหนังสือ:

  • การพัฒนาเอ็นจิ้นเกม

หนังสือเหล่านี้พูดคุยเกี่ยวกับสถาปัตยกรรมของเอ็นจิ้นเกมสมัยใหม่และท่อส่ง พวกเขาจะให้ภาพรวมที่ดีเกี่ยวกับเทคโนโลยีพื้นฐาน ฉันขอแนะนำหนังสือเล่มแรกหากคุณต้องเลือกมันน้อยกว่า "เอนเอียง" ต่อเทคโนโลยีบางอย่างแม้ว่าในท้ายที่สุดคุณอาจต้องการผ่านทั้งสองอย่างเนื่องจากพวกเขาเป็นแหล่งความรู้ที่ดี

http://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/1568814135

http://www.amazon.com/Game-Coding-Complete-Third-Edition/dp/1584506806

  • OpenGL

http://ogldev.atspace.co.uk/index.html

http://www.arcsynthesis.org/gltut/index.html

http://www.opengl.org/sdk/docs/man3/

  • GLSL

http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/glsl-core-tutorial-index/

http://www.opengl.org/sdk/docs/manglsl/

  • ตรวจจับการชนกัน

http://www.peroxide.dk/papers/collision/collision.pdf

(ฉันกำลังเชื่อมโยงสิ่งนี้เพราะฉันพบว่ามันยากที่จะหาบทความเกี่ยวกับวิธีการตรวจจับการชนกันของ 3D ที่เหมาะสม

มีหนังสือมากขึ้น แต่เมื่อคุณทำเสร็จแล้ว (โดยเฉพาะ Game Engine Architecture) คุณจะรู้ได้ดีกว่าสิ่งที่คุณต้องการ

Btw ฉันยังคงใช้ freeglut คุณจะแนะนำให้ฉันย้ายไปที่ระบบหน้าต่างที่ดีขึ้นก่อนที่จะดำเนินการต่อไปหรือหลังจากที่ฉันเข้าใจ OpenGL ดีขึ้นหรือไม่

WinAPI ถ้าคุณรู้สึกว่าคุณมีเวลาและต้องการเรียนรู้การเขียนโปรแกรม Windows (ถ้าคุณพัฒนา Windows) FreeGLUT นั้นใช้ได้สำหรับการเรียนรู้ แต่ในที่สุดคุณจะต้องการฟังก์ชั่นเพิ่มเติม แม้ว่าถ้าคุณต้องการไปเส้นทางอื่นอย่างสมบูรณ์คุณสามารถเปิด OpenGL ด้วยไลบรารีอย่าง SFML หรือ SDL ติดกับ FreeGLUT เว้นแต่คุณจะดื้อรั้นเหมือนฉัน ฉันตรงไปหา WinAPI


สวัสดี dreta ขอบคุณมากสำหรับคำตอบที่ดีของคุณฉันกำลังรอมัน: P! โชคดีที่ฉันรู้วิธีการตรวจจับการชนเนื่องจากฉันได้ใช้อัลกอริทึมสำหรับการจำลองทางฟิสิกส์แล้ว :)
Grieverheart

@ user1294203 ยอดเยี่ยมฉันหลงทางเมื่อเริ่มต้นดังนั้นเพียงโพสต์ไว้ในกรณี
dreta

ฉันลงคะแนนให้ SFML ถ้าคุณไม่ต้องการยุ่งมากเกินไปกับรหัสเฉพาะแพลตฟอร์ม มันมีขนาดเล็กง่ายสะอาดและคุณสามารถดำดิ่งลงในโค้ดเพื่อทำความเข้าใจได้ว่ามันห่อหุ้ม WINAPI อย่างไร
edin-m
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.