อะไรคือความแตกต่างระหว่างไลบรารี่กับเอ็นจิ้น?


31

ฉันทำงานในห้องสมุดเพื่อช่วยพัฒนาเกม 2D ด้วย Scala จนถึงตอนนี้มันเป็นชุดของคลาสที่มีประโยชน์การโหลดไฟล์การตรวจจับการชนภาพรูปภาพสไปรต์ ฯลฯ

ดังนั้นเมื่อไหร่ที่จะหยุดการเป็นห้องสมุดเรียนและเริ่มเป็นเครื่องมือ? ความแตกต่างระหว่างเฟรมเวิร์กที่มีประโยชน์และเอ็นจิ้นเกมอยู่ตรงไหน?


ฉันบอกได้ว่าไม่สามารถทำการกลั่นได้เนื่องจากเป็นแนวคิดในระดับที่เป็นนามธรรม เอ็นจิ้น "ใหญ่" ยังคงเป็นเฟรมเวิร์ก
AndréParamés

1
มีความแตกต่างน้อยกว่าระหว่างเอ็นจิ้นเกมและเฟรมเวิร์ก แต่จากชื่อระหว่างไลบรารีและเอ็นจิ้นมีความแตกต่างที่ชัดเจนและชัดเจนมาก ลิงก์นี้สรุป: gamefromscratch.com/post/2015/06/13/…
Serapth

คำตอบ:


21

ฉันคิดว่าความสับสนที่ผู้คนเข้ามาที่นี่คือโดยทั่วไปมักจะทำจากสิ่งอื่นดังนั้นสิ่งที่ผู้คนอยากรู้ก็คือเมื่อคุณมีคนมากพอที่จะได้รับการพิจารณา

ดังนั้นเมื่อไหร่ที่จะหยุดการเป็นห้องสมุดเรียนและเริ่มเป็นเครื่องมือ?

ไม่เคย

ความแตกต่างในกรอบงานที่มีประโยชน์และเอ็นจิ้นเกมอยู่ตรงไหน?

ไม่มีเลย

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

นี่คือตัวอย่างของเอ็นจิ้นเกม:

  • Unreal Engine
  • เครื่องยนต์จริง
  • เครื่องยนต์ต้นทาง
  • Quake Engine
  • Unity Engine

และตัวอย่างบางส่วนของห้องสมุด

  • Novodex (ฟิสิกส์)
  • FMOD (เสียง)
  • Havok (ฟิสิกส์)
  • Ogre3D (การแสดงผล)
  • BINK (คลังวิดีโอ)
  • Direct3D (กราฟิก)
  • OpenGL (กราฟิก)
  • DirectSound (เสียง)
  • XInput (อินพุต)

หวังว่านี่จะช่วยได้


1
แล้วความแตกต่างระหว่างเอ็นจิ้นการเรนเดอร์กับไลบรารีกราฟิกล่ะ? : p
Zaky German

1
@Zaky German - Ogre3D เป็น 'เอ็นจิ้น' กราฟิกเช่นเดียวกับ FMOD เป็นเสียง 'เอ็นจิ้น' แยกจากกันอย่างไรก็ตามสิ่งเหล่านี้ไม่ใช่เอ็นจิ้นเกมพวกเขาไม่ได้จัดการอินพุตของผู้ใช้การเชื่อมต่อเครือข่ายหรือสิ่งที่คล้ายกัน นี่คือที่ฉันคิดว่าความสับสนบางอย่างสามารถมาเล่น ในคำอธิบายนี้คุณสามารถแลกเปลี่ยน Library, Module, Component, หรือ Engine สิ่งเหล่านี้ไม่ใช่ 'Game Engine' ไลบรารีกราฟิกจะเป็นสิ่งที่คล้ายกับ Direct3D หรือ API แบบบางไปจนถึง Direct3D เพื่อให้ง่ายขึ้น แต่จะไม่ทำการเรนเดอร์โดยตรง OpenGL และสิ่งล้อมรอบมันก็จะตกอยู่ในพื้นที่ห้องสมุดกราฟิก
James

14

ไม่มีคำจำกัดความที่ชัดเจนสำหรับคำใดคำหนึ่ง (หรือคำว่า "กรอบงาน" ที่เกี่ยวข้องสำหรับเรื่องนั้น) มีหลายร้อยวิธีที่แตกต่างกันของการตีความแตกต่างที่ละเอียดอ่อนในแพคเกจซอฟต์แวร์และกำหนดประเภทพวกเขา

โดยส่วนตัวฉันมองว่า "ไลบรารี่" เป็นสิ่งที่ให้ชุดฟังก์ชั่นที่ค่อนข้างเล็กและตรงไปตรงมาในขณะที่ "เฟรมเวิร์ก" มีฟังก์ชั่นที่กว้างกว่าหรือกว้างกว่าและ "เอ็นจิ้น" ให้เหมือนกัน (หรือมากกว่า) เครื่องมือที่เกี่ยวข้องที่มาพร้อมกับมัน

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


มีความแตกต่างที่เป็นรูปธรรมระหว่างกรอบงานและห้องสมุดอื่น ๆ สิ่งเหล่านี้มีการระบุไว้ในหน้า Wikiของอดีต ชัดแจ้งกรอบการควบคุมการไหลของแอพลิเคชันและคุณเสียบรหัสของคุณลงไป ในไลบรารีอื่นคุณสามารถควบคุมการไหลและเรียกรหัสได้
AndréParamés

1
ฉันจะไม่พิจารณาขั้นสุดท้ายนั้น Wikipedia มีหน้าสำหรับ "game engine" เช่นกันเช่นเดียวกับ "library" และ "framework" คำเหล่านี้มักถูกใช้ในรูปแบบที่สอดคล้องกับคำอธิบายในหน้า wiki เหมือนในรูปแบบที่ไม่มีใน ประสบการณ์. มันยังคงเป็นคลื่นด้วยมือ
Josh

2

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

ตัวอย่างเช่นเอนจิ้น Unreal (หรือ Source หรือ Quake) ถูกออกแบบมาเพื่อใช้สำหรับเกม FPS (อาจเป็นไปได้ที่จะใช้สำหรับเกมอื่น แต่คุณต้องใช้เวลาทำงานกับเอ็นจิ้น) Ogre3d (หรือแม้แต่ Directx, SDL หรือไลบรารี่ทั่วไปอื่น ๆ ) สามารถใช้ในการสร้างเกมประเภทใดก็ได้โดยไม่ต้องลอกส่วนใหญ่ของรหัสหรือหลีกเลี่ยงพวกมัน

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