Làm thế nào các trò chơi được tạo ra cho các nền tảng khác nhau?
Ví dụ: Call of Duty: Modern Warfare 3 có sẵn trên PS3, Xbox 360, Wii và PC.
Có phải chúng được lập trình lại hoàn toàn không có mã chung? Có mã trung gian nào không?
Làm thế nào các trò chơi được tạo ra cho các nền tảng khác nhau?
Ví dụ: Call of Duty: Modern Warfare 3 có sẵn trên PS3, Xbox 360, Wii và PC.
Có phải chúng được lập trình lại hoàn toàn không có mã chung? Có mã trung gian nào không?
Câu trả lời:
Hầu hết các công cụ trò chơi cấp sản xuất có cái được gọi là Lớp trừu tượng phần cứng. Đây là một API chung mà công cụ trò chơi có thể sử dụng để nói chuyện với phần cứng mà không cần phải biết đó là phần cứng nào. Họ chỉ cần gọi SoundManager.PlaySFX (SFX_ID) hoặc tương tự. Tuy nhiên, bên dưới trình quản lý âm thanh, nó sẽ biết phần cứng nào thực sự hoạt động và thực hiện các cuộc gọi phù hợp để có được hiệu ứng âm thanh để phát.
Điều này cho phép công cụ được phát triển bằng cách sử dụng lớp trừu tượng đó để nó có thể chạy trên bất kỳ hệ thống nào được cung cấp API được cung cấp cho phần cứng phù hợp với sự trừu tượng hóa đó. EDIT: Theo ghi nhận của Johnathan, cần có API cho mỗi nền tảng bạn muốn chạy. Và theo quan điểm của Trevor, khi chuyển từ hệ thống bộ nhớ cao sang bộ nhớ thấp (tệ nhất đối với tôi là PS3 sang PSP), bạn có thể phải giải quyết các hạn chế phần cứng khác nhau. May mắn cho tôi, tôi đã không phải viết lại toàn bộ hệ thống vì một nền tảng, nhưng tôi đã phải trải qua và tối ưu hóa các đối tượng để chiếm ít dấu chân hơn.
Mặt khác của sự việc là trong lĩnh vực nghệ thuật nơi độ phân giải của kết cấu hoặc mô hình và tương tự là khác nhau. Tài sản của trò chơi có thể được xây dựng hướng tới một mục tiêu cụ thể để PC có được các tệp wav cho hiệu ứng âm thanh của nó trong khi chúng được chuyển thành các định dạng cụ thể mà PS3 hỗ trợ và tương tự.
Hi vọng điêu nay co ich.
Các câu trả lời khác đánh vần mọi thứ trong các trường hợp lý tưởng. Hầu hết các mã là phổ biến cho các trò chơi và một lớp trừu tượng sạch sẽ được sử dụng cho các bộ phận phụ thuộc vào phần cứng / nền tảng.
Tuy nhiên, nhiều trò chơi có các cổng được thực hiện bởi một công ty thuê ngoài và mã phân kỳ đáng kể. Điều này đặc biệt đúng với các bảng điều khiển, nhưng cũng phổ biến của các cổng tới OSX hoặc Linux từ Windows.
Trên bảng điều khiển, phần cứng đủ khác nhau mà thường toàn bộ khối kết xuất lõi (và hiếm khi các hệ thống khác) phải được viết lại hoàn toàn. Trên PC, bạn có thể sử dụng trừu tượng trên D3D và OpenGL, vì các API hệ điều hành khác nhau nhưng tất cả phần cứng của PC đều giống nhau.
Trên không gian bảng điều khiển, bạn có thể thấy rằng công cụ kết xuất tuyệt đẹp siêu hiệu quả của mình hoàn toàn không thể chuyển trực tiếp sang một bảng điều khiển khác, vì các khả năng của GPU rất khác nhau và bạn thực sự cần phải vắt kiệt mọi phần trăm hiệu suất cuối cùng để có được 7 năm phần cứng cũ để chạy trò chơi hiện đại của bạn. Bạn có thể dễ dàng tìm thấy các trường hợp trong đó công cụ chiếu sáng hoạt động tốt nhất trên XBox chậm kinh khủng trên PS3 và cách tiếp cận tốt nhất với chó PS3 trên XBox. Sự khác biệt về phần cứng và nền tảng khác (ví dụ SPU trên PS3 so với CPU ba lõi của XBox) khiến cho việc dựa vào lớp trừu tượng phần cứng đơn giản là đường dẫn mã phụ thuộc nền tảng duy nhất của bạn rất khó khăn.
Vì mỗi nền tảng cũng đòi hỏi một lượng chuyên môn sâu rộng để sử dụng nó đúng cách, nhiều trò chơi yêu cầu một công ty porting thuê ngoài chuyên dụng để đưa trò chơi lên các nền tảng bổ sung. Trong không gian PC đôi khi bạn có thể tìm thấy các nhà phát triển solo làm các cổng (như Ryan "icculus" Gordon, người thực hiện nhiều cổng trò chơi Linux, thường xuyên làm việc, thay đổi D3D thành GL và Win32 thành POSIX / SDL), trong khi ở trong không gian bảng điều khiển có những công ty với tất cả các đội làm công việc chuyển đồ sộ cho các trò chơi lớn hơn.
Các cổng tới một số nền tảng yêu cầu phải viết lại gần như hoàn chỉnh hoặc thiết kế lại tài sản. Ví dụ, các cổng Call of Duty của Wii được thực hiện bởi một công ty thuê ngoài và tất cả mọi thứ - bao gồm cả tài sản nghệ thuật - phải được làm lại để phù hợp với các hạn chế của phần cứng rất hạn chế của Wii. Chẳng hạn, Wii thậm chí không có shader, do đó, việc sử dụng lại cùng một công cụ và hiệu ứng / vật liệu là hoàn toàn không thể, và bộ nhớ và CPU / GPU hạn chế yêu cầu kết cấu nhỏ hơn và mô hình ít chi tiết hơn, cộng với các hạn chế về trò chơi, v.v. Các cổng vào nền tảng di động tương tự thường được viết lại hoàn toàn, thường là bởi bên thứ ba.
Các công cụ mới hơn giúp việc chuyển đổi giữa các nền tảng dễ dàng hơn, nhưng các trò chơi lớn hơn thường vẫn cần cập nhật các phần lớn của mã và làm lại nhiều tài sản để thay đổi từ các nền tảng và bảng điều khiển PC có khả năng hơn sang các nền tảng bị hạn chế hơn.
James reponse chỉ liên quan đến PC chứ không liên quan đến việc triển khai trên các nền tảng cụ thể.
Trong khi tất cả các công cụ trừu tượng hóa nền tảng cho phần lớn mã trò chơi, một số phần phải được viết trên mỗi nền tảng. Điều này bao gồm tất cả I / O bao gồm mạng, kết xuất, âm thanh, đầu vào thiết bị và tôi nghĩ đầu ra video.
So sánh mã kết xuất để nói Unreal trên Xbox và PS3. Xbox sử dụng phiên bản Xbox DirectX, trong khi PS3 sử dụng libgcm (thư viện OpenGl quá chậm). Để đơn giản hóa một chút, trên tất cả các nền tảng, các lập trình viên trò chơi chỉ nhìn thấy "AudioSystem.PlaySound ( SoundName tại đây ), trong khi với mỗi nền tảng họ hoạt động bên trong sẽ gọi API nền tảng để phát âm thanh.
Xem thêm bình luận của Tatrad để biết thêm về lập trình.