อะไรคือเอ็นจิ้นเกมโอเพนซอร์ซที่ได้รับการออกแบบที่ดีที่สุดในการเป็นตัวอย่าง? [ปิด]


15

ซ้ำเป็นไปได้:
ฉันจะหาตัวอย่างของรหัสเกมที่ดี (มีการจัดการที่ดี) ได้ที่ไหน

ฉันเขียนรหัสเกม C ++ หลายเกมและตอนนี้ฉันกำลังสร้างเอ็นจิ้นเกมของฉันเองและแก้ไข

ฉันมีข้อสงสัยเกี่ยวกับการออกแบบและฉันต้องการหาตัวอย่างที่ดีในการติดตาม

การออกแบบที่ดีที่สุดในความคิดเห็นของคุณคืออะไร?

ต้องเป็นวัตถุ ภาษาการเขียนโปรแกรมไม่สำคัญ แต่ฉันชอบตามลำดับนี้: C ++, C #, Java หรืออื่น ๆ ที่คล้ายกัน

แก้ไข: เพื่อชี้แจงเพิ่มเติมฉันไม่สนใจรหัสเฉพาะเกม ฉันต้องการเอนจิ้นเกมเอนกประสงค์

แก้ไข:บทความนี้อธิบายว่าเอ็นจิ้นเกมคืออะไร: เอ็นจิ้นเกมที่วิกิพีเดียและนี่คือรายชื่อเอ็นจิ้นเกมที่รู้จัก: รายชื่อเอ็นจิ้นเกมที่วิกิพีเดีย


3
คุณเข้าใจคำถามของฉันจริงหรือ ฉันหวังว่าเอ็นจิ้นเกม (ไม่ใช่แค่เกม ) และผมขอจะต้องเป็นเชิงวัตถุ ในเธรดที่คุณพูดคำตอบสำหรับเกมเท่านั้น (Doom3, Prototype, ฯลฯ ) และยังมีชุดเครื่องมือกราฟิก (OpenSceneGraph) แต่ไม่มีอะไรเฉพาะเกี่ยวกับ "เครื่องมือเกม" ในเธรดนั้น ... คุณสามารถปิด หรือลบคำถามของฉันหากคุณไม่ชอบ แต่ฉันไม่เข้าใจการลงคะแนน ... :( คำถามของฉันไม่เหมือนกัน
Dani

2
เพื่อความกระจ่างยิ่งขึ้นฉันไม่สนใจโค้ดเฉพาะเกม ฉันต้องการเอนจิ้นเกมเอนกประสงค์
Dani

3
มีความแตกต่าง: ไม่ใช่ทุกเกมที่รันบนเอนจิ้นเอนกประสงค์ Doom3 มีเอ็นจิ้นเฉพาะของ FPS, Prototype นั้นแตกต่างกันไป ... อาจเป็นได้เหมือนกัน (การจัดการทรัพยากร, การเขียนสคริปต์ ... ) แต่สิ่งนี้ไม่เกี่ยวข้องกับคำถามของฉัน คำถามของฉันเริ่มต้นด้วยวลี "ฉันเขียนรหัสเกม C ++ หลายเกม" ฉันย้ำ: ความต้องการของฉันคือการหารหัสแหล่งเครื่องยนต์เอนจิ้นเกมทั่วไปที่ดี ไม่ใช่แหล่งเกมเพื่อค้นหารหัสที่ใช้ซ้ำได้
Dani

1
Doom 3 มี "เครื่องมือเฉพาะ FPS" แต่ยังมีทุกส่วนที่ต้องการเครื่องยนต์ทั่วไปเช่นที่คุณพูดการจัดการทรัพยากรและการเขียนสคริปต์การเรนเดอร์ 3 มิติฟิสิกส์และอื่น ๆ มันเป็นเอนจิ้นทั่วไปและอื่น ๆไม่น้อยไปกว่านี้

2
@Joe Wreschnig ฉันอยากจะเห็นด้วยกับ @Dani ในหัวข้อนี้ แม้ว่าเกมทั้งหมดจะขับเคลื่อนด้วยรูปแบบของเครื่องยนต์ แต่รูปแบบสถาปัตยกรรมที่ใช้สำหรับเอ็นจิ้น "one-off" และเอ็นจิ้นที่ออกแบบมาเพื่อทำงานในหลาย ๆ เกมนั้นมีความแตกต่างกันมากแม้ว่าพวกเขาทั้งสองจะมีสคริปต์การจัดการทรัพยากร ส่วนประกอบอื่น ๆ นอกจากนี้การดูรหัสสำหรับเกมที่สร้างขึ้นบนเอนจิ้นที่พัฒนาโดยสตูดิโอเดียวกันอาจไม่ใช่ตัวเลือกที่ฉลาดที่สุดเนื่องจากจะไม่ให้ข้อบ่งชี้ที่แท้จริงว่าความยืดหยุ่นและการใช้งานเครื่องยนต์นั้นง่ายแค่ไหนในสภาพแวดล้อมของบุคคลที่สาม
Ari Patrick

คำตอบ:


6

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

ตัวอย่างเช่นฉันทำอะไรมากมายกับ Python / pygame (ซึ่งเป็นเสื้อคลุม SDL) ฉันสนุกกับระบบค่อนข้างน้อย แต่มีสามสิ่งที่รบกวนฉัน:

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

มันค่อนข้างง่ายที่จะสร้าง wrapper เชิงวัตถุรอบคุณสมบัติเหล่านี้ ดูบทที่ 10 และเอกสารของ Game Engine ที่มีอยู่ที่นี่: http://aharrisbooks.net/pythonGame/

(สิ่งนี้ถูกเขียนเป็นส่วนหนึ่งของหนังสือ แต่คุณยินดีต้อนรับสู่เครื่องมือเกมแม้ว่าคุณจะไม่ต้องการหนังสือเล่มนี้)

บทที่ 10 อธิบายแรงจูงใจและเทคนิคในการสร้างเอ็นจิ้นเกม 2D ขั้นพื้นฐาน คุณอาจสนุกกับมันในขณะที่คุณสร้างของคุณเอง ภาษาจริงไม่ใช่สิ่งสำคัญ (ยกเว้นแน่นอนว่าคุณต้องใช้ภาษา OOP เพื่อรองรับ OOP) หากคุณใช้ SDL กับ C ++ อยู่แล้วคุณอาจเริ่มต้นด้วยการปรับเอนจิ้นของฉันเป็น C ++ / SDL


8

การออกแบบเอ็นจิ้น Quake (ID tech) ที่น่าเชื่อถือนั้นได้ผ่านการทดสอบมาแล้วและน่าจะเป็นตัวออกแบบเกมที่ประสบความสำเร็จสูงสุดตลอดกาล ทุกอย่างนอกเหนือจากตัวเรนเดอร์ไม่มีการเปลี่ยนแปลงตั้งแต่ช่วงปลายยุค 90 และยังคงใช้ในเกมสมัยใหม่เช่น ETQW

ซอร์สโค้ดแบบเต็มสำหรับการวนซ้ำสี่ครั้งของเอนจินนี้ (Quake 1 ถึง 3, บวก Wolf ET) มีให้ภายใต้ GPL อาจมีเครื่องมือเกม Quake-based ที่ได้รับการพัฒนาโดยชุมชนกว่าร้อยคนซึ่งทำให้พวกเขามีความเกี่ยวข้องในยุคปัจจุบัน โดยเฉพาะอย่างยิ่งสิ่งที่ควรค่าแก่การดูคือ XreaL สำหรับตัวเรนเดอร์ที่ยอดเยี่ยมและ ioQuake3 สำหรับการบำรุงรักษา Quake 3 ที่ได้รับการปรับแต่งสำหรับฮาร์ดแวร์ที่ทันสมัย นอกจากนี้สำหรับเอ็นจิ้น ID รุ่น "เป็นทางการ" ล่าสุดของลอจิกเกมตรรกะ (ไม่ใช่เอ็นจิ้นทั้งหมด) ก็มีให้เช่นกัน

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


1
แม้ว่าฉันจะไม่เรียกวัตถุเชิงเทคโนโลยี pre-Doom3 id แน่นอน
Tetrad

3
ไม่ไม่ใช่เชิงวัตถุ แต่อย่างที่ฉันบอกว่ามันคุ้มค่าที่จะศึกษา ฉันหมายถึง c'mon เพียงเพราะขั้นตอนไม่ได้หมายความว่ามันจะทำให้คุณเป็นมะเร็งตาถ้าคุณดูมัน! ;)
Max E.

6

ไลบรารีการเรนเดอร์ Ogre3D ค่อนข้างใกล้เคียงกับรหัสเครื่องยนต์และจากทุกบัญชีที่ฉันได้ยินมานั้นได้รับการออกแบบมาเป็นอย่างดีและมี OO มาก

http://www.ogre3d.org/


+1 สุดยอดเครื่องมือ ขอบคุณ Tetrad! ฉันรู้แล้ว แต่ฉันไม่เคยใช้หรือไม่เคยเห็นมันเป็นซอร์สโค้ด คุณรู้หรือไม่ว่ามันมีการบูรณาการ AI (เช่นการค้นหาเส้นทาง ฯลฯ )
Dani

3
ฉันคิดว่ามันเป็นเพียงการแสดงผลที่เกี่ยวข้อง
Tetrad

2
Ogre เป็นไลบรารีการเรนเดอร์กราฟิกเท่านั้น เอ็นจิ้นการแสดงผลกราฟิกเชิงวัตถุ
Jonathan Sternberg

0

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

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

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

อุตสาหกรรมเกมไม่ได้ให้บริการอย่างเปิดเผยโดยโอเพ่นซอร์สเช่นเดียวกับสาขาวิทยาศาสตร์คอมพิวเตอร์อื่น ๆ เพียงเพราะความบันเทิงมีใบอนุญาตประเภทต่าง ๆ ซึ่งเกี่ยวข้องกับใบอนุญาตทางศิลปะ: ผลิตภัณฑ์เกมจ่ายโดยลูกค้าเท่านั้นและ AFAIK มีเพียง เอ็นจินไม่กี่ตัวที่ดูเหมือนดีพอที่จะทำงานให้คุณ: Hord3d, NeoAxis, mixelf, Panda3D แต่ฉันไม่สามารถรับรองได้ว่าพวกเขาจะใช้งานง่ายเหมือนเครื่องมืออย่าง Unity, Torque, C4 และอื่น ๆ โปรดจำไว้ว่าเอ็นจิ้นเกมคือด้วยตัวแสดงผลกราฟิกฉันคิดว่าซอฟต์แวร์ประเภทที่ยากที่สุดที่คุณจะพบในการสร้างเกม


0

สำหรับฉันที่ใช้ Python กับ Pygame เป็นทางออกที่ดี บางทีงูหลามอาจจะช้าไปหน่อย แต่สำหรับคอมพิวเตอร์ในปัจจุบันและถ้าคุณแค่พยายามเพิ่มประสิทธิภาพให้กับเกมของคุณสิ่งนี้อาจไม่สำคัญ Pygame มีเอกสารที่ดีมากที่ไซต์ pygame ดั้งเดิม แต่ก่อนอื่นให้เริ่มต้นบทช่วยสอนเพื่อเรียนรู้พื้นฐานบางอย่าง สำหรับการเพิ่มประสิทธิภาพความเร็ว (การแปลงภาพ, ... ) คุณจะต้องมีตัวอย่างอื่นที่หาได้ง่าย

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