เกมถูกสร้างขึ้นสำหรับแพลตฟอร์มที่แตกต่างกันอย่างไร
ตัวอย่างเช่น Call of Duty: Modern Warfare 3 มีให้บริการบน PS3, Xbox 360, Wii และ PC
พวกเขากำลัง reprogrammed อย่างสมบูรณ์โดยไม่มีรหัสทั่วไป? มีรหัสกลางหรือไม่
เกมถูกสร้างขึ้นสำหรับแพลตฟอร์มที่แตกต่างกันอย่างไร
ตัวอย่างเช่น Call of Duty: Modern Warfare 3 มีให้บริการบน PS3, Xbox 360, Wii และ PC
พวกเขากำลัง reprogrammed อย่างสมบูรณ์โดยไม่มีรหัสทั่วไป? มีรหัสกลางหรือไม่
คำตอบ:
เอ็นจิ้นเกมระดับการผลิตส่วนใหญ่มีสิ่งที่เรียกว่า Hardware Abstraction Layer นี่เป็น API ทั่วไปที่เอ็นจิ้นเกมสามารถใช้เพื่อพูดคุยกับฮาร์ดแวร์โดยไม่จำเป็นต้องทราบว่าเป็นฮาร์ดแวร์ใด พวกเขาเพียงแค่เรียก SoundManager.PlaySFX (SFX_ID) หรือสิ่งที่คล้ายกัน ภายใต้ตัวจัดการเสียง แต่มันจะรู้ว่าฮาร์ดแวร์ตัวใดที่ใช้งานได้จริงและทำการโทรที่เหมาะสมเพื่อรับเอฟเฟกต์เสียงเพื่อเล่น
สิ่งนี้ทำให้เครื่องยนต์ได้รับการพัฒนาโดยใช้เลเยอร์ของนามธรรมนั้นจึงสามารถทำงานบนระบบใดก็ได้ที่มี API ให้ไว้สำหรับฮาร์ดแวร์นั้นที่ตรงกับสิ่งที่เป็นนามธรรม แก้ไข: ตามที่ระบุไว้โดย Johnathan จำเป็นต้องใช้ API สำหรับแต่ละแพลตฟอร์มที่คุณต้องการ และถึงจุดของเทรเวอร์เมื่อย้ายจากระบบหน่วยความจำสูงไปยังหน่วยความจำเหลือน้อย (แย่ที่สุดสำหรับฉันคือ PS3 ถึง PSP) คุณอาจต้องจัดการกับข้อ จำกัด ของฮาร์ดแวร์ที่แตกต่างกัน โชคดีสำหรับฉันฉันไม่ต้องเขียนทั้งระบบเนื่องจากแพลตฟอร์ม แต่ฉันต้องผ่านและปรับวัตถุให้เหมาะสมเพื่อลดรอยเท้า
อีกด้านของสิ่งต่าง ๆ อยู่ในพื้นที่ศิลปะที่ความละเอียดของพื้นผิวหรือแบบจำลองและสิ่งที่คล้ายคลึงนั้นแตกต่างกัน สินทรัพย์ของเกมสามารถสร้างขึ้นเพื่อเป้าหมายที่เฉพาะเจาะจงเพื่อให้พีซีได้รับไฟล์ wav สำหรับเอฟเฟกต์เสียงในขณะที่พวกเขาเปลี่ยนเป็นรูปแบบเฉพาะที่รองรับ PS3 และอื่น ๆ
หวังว่านี่จะช่วยได้
คำตอบอื่น ๆ สะกดสิ่งออกในกรณีที่เหมาะ รหัสส่วนใหญ่เป็นเรื่องปกติสำหรับเกมและเลเยอร์นามธรรมที่สะอาดใช้สำหรับฮาร์ดแวร์ / แพลตฟอร์มที่ขึ้นอยู่กับชิ้นส่วน
อย่างไรก็ตามหลายเกมมีพอร์ตที่ทำโดย บริษัท ภายนอกและมีรหัสที่แตกต่างกัน นี่เป็นเรื่องจริงโดยเฉพาะกับคอนโซล แต่ก็เป็นเรื่องปกติของพอร์ตไปยัง OSX หรือ Linux จาก Windows
บนคอนโซลฮาร์ดแวร์จะแตกต่างกันมากพอที่จะทำให้การเรนเดอร์หลักทั้งหมด (และระบบอื่น ๆ ) แทบจะไม่ต้องเขียนใหม่ บนพีซีคุณสามารถ jut abstract ผ่าน D3D และ OpenGL เนื่องจาก OS APIs แตกต่างกัน แต่ฮาร์ดแวร์พีซีทั้งหมดนั้นเหมือนกัน
บนพื้นที่คอนโซลคุณอาจพบว่าเอนจิ้นการเรนเดอร์ที่มีประสิทธิภาพสุดยอดของคุณนั้นเป็นไปไม่ได้เลยที่จะทำการพอร์ตโดยตรงไปยังคอนโซลอื่นเนื่องจากความสามารถของ GPU นั้นแตกต่างกันมากและคุณจำเป็นต้องลดประสิทธิภาพลงทุก ๆ ฮาร์ดแวร์เก่าเพื่อรันเกมที่ทันสมัยของคุณ คุณสามารถค้นหากรณีที่แสงผ่านที่ทำงานได้ดีที่สุดบน XBox นั้นช้ามากบน PS3 และวิธีการที่ดีที่สุดสำหรับสุนัข PS3 บน XBox ความแตกต่างด้านฮาร์ดแวร์และแพลตฟอร์มอื่น ๆ (เช่น SPUs บน PS3 เทียบกับซีพียู tri-core ของ XBox) ทำให้มันยากมากที่จะพึ่งพาเลเยอร์นามธรรมที่เรียบง่ายของฮาร์ดแวร์บาง ๆ เป็นเส้นทางโค้ดที่ขึ้นอยู่กับแพลตฟอร์มของคุณเท่านั้น
เนื่องจากแต่ละแพลตฟอร์มต้องการความเชี่ยวชาญจำนวนมากเพื่อใช้งานอย่างถูกต้องเกมจำนวนมากจึงต้องมี บริษัท ผู้ให้บริการเอาท์ซอร์สเฉพาะเพื่อนำเกมมาสู่แพลตฟอร์มเพิ่มเติม ในพื้นที่พีซีบางครั้งคุณสามารถหานักพัฒนาเดี่ยวที่ทำพอร์ต (เช่น Ryan "icculus" Gordon ที่ทำพอร์ตเกม Linux หลายตัวทำงานตรงไปตรงมามักจะเปลี่ยน D3D เป็น GL และ Win32 เป็น POSIX / SDL) ในขณะที่อยู่ในพื้นที่คอนโซล มี บริษัท ที่มีทุกทีมในการทำพอร์ตที่ค่อนข้างใหญ่สำหรับเกมที่ใหญ่กว่า
พอร์ตไปยังบางแพลตฟอร์มต้องการการเขียนซ้ำเกือบทั้งหมดหรือการออกแบบสินทรัพย์ใหม่ พอร์ตของ Call of Duty ของ Wii เช่นที่ทำโดย บริษัท ภายนอกและทุกอย่างรวมถึงสินทรัพย์ทางศิลปะจะต้องทำการเชื่อมต่อใหม่เพื่อให้สอดคล้องกับข้อ จำกัด ของฮาร์ดแวร์ที่ จำกัด ของ Wii ยกตัวอย่างเช่น Wii ไม่ได้มีเฉดสีดังนั้นเพียงแค่การนำเครื่องยนต์และเอฟเฟ็กต์ / วัสดุเดียวกันกลับมาใช้ไม่ได้เลยและหน่วยความจำที่ จำกัด และ CPU / GPU นั้นต้องการพื้นผิวที่เล็กกว่าและมีรายละเอียดน้อยกว่า พอร์ตไปยังแพลตฟอร์มมือถือโดยทั่วไปแล้วจะถูกเขียนใหม่ทั้งหมดโดยบุคคลที่สาม
เอ็นจิ้นรุ่นใหม่ช่วยให้การพอร์ตระหว่างแพลตฟอร์มทำได้ง่ายขึ้น แต่โดยทั่วไปแล้วเกมที่ใหญ่กว่านั้นยังจำเป็นต้องอัปเดตโค้ดที่มีขนาดใหญ่และทำซ้ำสินทรัพย์จำนวนมากเพื่อเปลี่ยนจากแพลตฟอร์มพีซีและคอนโซลที่มีความสามารถมากขึ้น
James reponse เกี่ยวข้องกับพีซีเท่านั้นและไม่ใช่สำหรับการใช้งานบนแพลตฟอร์มเฉพาะ
ในขณะที่เอ็นจิ้นทั้งหมดสร้างนามธรรมแพลตฟอร์มสำหรับส่วนใหญ่ของรหัสเกมบางส่วนจะต้องมีการเขียนต่อแพลตฟอร์ม ซึ่งรวมถึง I / O ทั้งหมดรวมถึงเครือข่ายการแสดงผลเสียงอินพุตของอุปกรณ์ & ฉันคิดว่าเอาท์พุทวิดีโอ
เปรียบเทียบรหัสการเรนเดอร์สำหรับพูดว่าไม่จริงบน Xbox และ PS3 Xbox ใช้รุ่น Xbox DirectX ในขณะที่ PS3 ใช้ libgcm (ไลบรารี OpenGl ช้าเกินไป) เพื่อให้ง่ายขึ้นเล็กน้อยบนแพลตฟอร์มทั้งหมดโปรแกรมเมอร์การเล่นเกมจะเห็นเฉพาะ "AudioSystem.PlaySound ( SoundName ที่นี่ ) ในขณะที่สำหรับแต่ละแพลตฟอร์มพวกเขาทำงานภายในจะเรียก API ของแพลตฟอร์มสำหรับเอาต์พุตเสียง
ดูความคิดเห็นของ Tatrad สำหรับการเขียนโปรแกรมเพิ่มเติม