เกมถูกสร้างขึ้นสำหรับแพลตฟอร์มที่แตกต่างกันอย่างไร


9

เกมถูกสร้างขึ้นสำหรับแพลตฟอร์มที่แตกต่างกันอย่างไร

ตัวอย่างเช่น Call of Duty: Modern Warfare 3 มีให้บริการบน PS3, Xbox 360, Wii และ PC

พวกเขากำลัง reprogrammed อย่างสมบูรณ์โดยไม่มีรหัสทั่วไป? มีรหัสกลางหรือไม่


3
โดยปกติแล้วมันจะทำใน C ++ และเนื้อหาเฉพาะแพลตฟอร์มนั้นจะถูกลดชั้นลงไปสองคลาส
ashes999

คำตอบ:


11

เอ็นจิ้นเกมระดับการผลิตส่วนใหญ่มีสิ่งที่เรียกว่า Hardware Abstraction Layer นี่เป็น API ทั่วไปที่เอ็นจิ้นเกมสามารถใช้เพื่อพูดคุยกับฮาร์ดแวร์โดยไม่จำเป็นต้องทราบว่าเป็นฮาร์ดแวร์ใด พวกเขาเพียงแค่เรียก SoundManager.PlaySFX (SFX_ID) หรือสิ่งที่คล้ายกัน ภายใต้ตัวจัดการเสียง แต่มันจะรู้ว่าฮาร์ดแวร์ตัวใดที่ใช้งานได้จริงและทำการโทรที่เหมาะสมเพื่อรับเอฟเฟกต์เสียงเพื่อเล่น

สิ่งนี้ทำให้เครื่องยนต์ได้รับการพัฒนาโดยใช้เลเยอร์ของนามธรรมนั้นจึงสามารถทำงานบนระบบใดก็ได้ที่มี API ให้ไว้สำหรับฮาร์ดแวร์นั้นที่ตรงกับสิ่งที่เป็นนามธรรม แก้ไข: ตามที่ระบุไว้โดย Johnathan จำเป็นต้องใช้ API สำหรับแต่ละแพลตฟอร์มที่คุณต้องการ และถึงจุดของเทรเวอร์เมื่อย้ายจากระบบหน่วยความจำสูงไปยังหน่วยความจำเหลือน้อย (แย่ที่สุดสำหรับฉันคือ PS3 ถึง PSP) คุณอาจต้องจัดการกับข้อ จำกัด ของฮาร์ดแวร์ที่แตกต่างกัน โชคดีสำหรับฉันฉันไม่ต้องเขียนทั้งระบบเนื่องจากแพลตฟอร์ม แต่ฉันต้องผ่านและปรับวัตถุให้เหมาะสมเพื่อลดรอยเท้า

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

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


1
ฉันจะเพิ่มเรื่องนี้ว่าในกรณีส่วนใหญ่ PC / PS3 / Xbox360 จะแบ่งปัน codebase ทั่วไปหนึ่งรายการในขณะที่ Wii / PS2 / PSP จะแบ่งปัน codebase อื่น Gameboy จะมี codebase แยกต่างหากทั้งหมดโดยปกติแล้ว iPhone / Android มักจะใช้ codebase ร่วมกัน สิ่งเหล่านี้ส่วนใหญ่เกิดจากพลังการประมวลผลในระดับกว้าง, หน่วยความจำที่มีอยู่, และคณะกราฟิกของแพลตฟอร์มต่างๆ ฉันเคยพอร์ตเกมจาก Xbox 360 ไปยัง PS2; รหัสต้นฉบับน้อยมากรอดชีวิตจากกระบวนการเพียงเพราะมันสันนิษฐานว่ามีจำนวนมากและ RAM จำนวนมากพร้อมใช้งาน; ฉันต้องเขียนใหม่เพื่อใช้หน่วยความจำน้อย
เทรเวอร์พาวเวลล์

+1, คุณไม่ได้ระบุอย่างชัดเจนว่า HAL นั้นแตกต่างกันระหว่างแพลตฟอร์ม (เหตุผลที่ Psykocyber ตอบเช่นกัน) - อาจเพิ่มว่าคุณต้องการ HAL สำหรับแต่ละแพลตฟอร์มหรือไม่ นอกจากนี้การใช้ ANSI C / ++ อาจเป็นข้อกำหนดตามที่คุณต้องการรวบรวม
Jonathan Dickinson

เทรเวอร์: Gameboy? ประณามฉันต้องเดินทางไปในอดีตควรกลับไปที่ไทม์แมชชีนของฉันดีกว่า ...

3

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

อย่างไรก็ตามหลายเกมมีพอร์ตที่ทำโดย บริษัท ภายนอกและมีรหัสที่แตกต่างกัน นี่เป็นเรื่องจริงโดยเฉพาะกับคอนโซล แต่ก็เป็นเรื่องปกติของพอร์ตไปยัง 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 นั้นต้องการพื้นผิวที่เล็กกว่าและมีรายละเอียดน้อยกว่า พอร์ตไปยังแพลตฟอร์มมือถือโดยทั่วไปแล้วจะถูกเขียนใหม่ทั้งหมดโดยบุคคลที่สาม

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


2

James reponse เกี่ยวข้องกับพีซีเท่านั้นและไม่ใช่สำหรับการใช้งานบนแพลตฟอร์มเฉพาะ
ในขณะที่เอ็นจิ้นทั้งหมดสร้างนามธรรมแพลตฟอร์มสำหรับส่วนใหญ่ของรหัสเกมบางส่วนจะต้องมีการเขียนต่อแพลตฟอร์ม ซึ่งรวมถึง I / O ทั้งหมดรวมถึงเครือข่ายการแสดงผลเสียงอินพุตของอุปกรณ์ & ฉันคิดว่าเอาท์พุทวิดีโอ
เปรียบเทียบรหัสการเรนเดอร์สำหรับพูดว่าไม่จริงบน Xbox และ PS3 Xbox ใช้รุ่น Xbox DirectX ในขณะที่ PS3 ใช้ libgcm (ไลบรารี OpenGl ช้าเกินไป) เพื่อให้ง่ายขึ้นเล็กน้อยบนแพลตฟอร์มทั้งหมดโปรแกรมเมอร์การเล่นเกมจะเห็นเฉพาะ "AudioSystem.PlaySound ( SoundName ที่นี่ ) ในขณะที่สำหรับแต่ละแพลตฟอร์มพวกเขาทำงานภายในจะเรียก API ของแพลตฟอร์มสำหรับเอาต์พุตเสียง
ดูความคิดเห็นของ Tatrad สำหรับการเขียนโปรแกรมเพิ่มเติม


1
นี่คือสิ่งที่เจมส์พูดเขาแค่ละเลยที่จะพูดถึงว่า HAL นั้นแตกต่างกันไปในแต่ละแพลตฟอร์ม
Jonathan Dickinson

จริง ๆ แล้วฉันได้พูดถึงว่ามันจะทำงานบนระบบใด ๆ ที่มี HAL API ไว้ให้ แต่ฉันทำให้ชัดเจนยิ่งขึ้นเนื่องจากสิ่งนี้ทำให้เกิดความสับสนอย่างชัดเจน นอกจากนี้คุณไม่ได้รหัสพอร์ตบนพีซีไปยังพีซีเครื่องอื่นจนกว่าคุณจะข้ามระบบปฏิบัติการเหมือนกับระบบ Mac หรือ Unix สำหรับสภาพแวดล้อมของ windows ที่เกมส่วนใหญ่ทำงานเป็นไดรเวอร์ฮาร์ดแวร์ที่จัดการสิ่งนี้ให้คุณแล้วคุณสร้างบัฟเฟอร์ข้อมูล DirectX หรือ OpenGL ผ่านการเรียกใช้ไดรเวอร์และฮาร์ดแวร์รู้ว่าต้องทำอะไรจากที่นั่น
James
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.