Làm thế nào các trò chơi được tạo ra cho các nền tảng khác nhau?


9

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?


3
Thông thường, tất cả được thực hiện trong C ++ và các công cụ dành riêng cho nền tảng được chuyển sang một vài lớp.
tro999

Câu trả lời:


11

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.


1
Tôi sẽ nói thêm rằng trong hầu hết các trường hợp, PC / PS3 / Xbox360 sẽ chia sẻ một cơ sở mã phổ biến, trong khi Wii / PS2 / PSP sẽ chia sẻ một cơ sở mã khác nhau. Gameboy sẽ có một cơ sở mã riêng biệt và iPhone / Android thường sẽ chia sẻ một cơ sở mã. Chúng chủ yếu là do mức độ xử lý rộng, bộ nhớ khả dụng và các khoa đồ họa của các nền tảng khác nhau. Tôi đã từng phải chuyển một trò chơi từ Xbox 360 sang PS2; rất ít mã gốc tồn tại trong quá trình, chỉ vì nó giả định rằng có rất nhiều RAM có sẵn để sử dụng; Tôi đã phải viết lại nó để sử dụng ít bộ nhớ hơn.
Trevor Powell

+1, Bạn không đề cập rõ ràng rằng HAL khác nhau giữa các nền tảng (lý do Psykocyber cũng trả lời) - có thể thêm rằng bạn cần HAL cho mỗi nền tảng? Ngoài ra, sử dụng ANSI C / ++ có lẽ là một yêu cầu khi bạn cần biên dịch chéo nó.
Jonathan Dickinson

Trevor: Gameboy? Chết tiệt, tôi phải du hành về quá khứ, tốt hơn là quay trở lại cỗ máy thời gian của mình ...

3

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.


2

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.


1
Đây chính xác là những gì James nói, anh ta đã bỏ qua việc đề cập rằng HAL khác nhau cho mỗi nền tảng.
Jonathan Dickinson

Tôi thực sự đã đề cập rằng nó sẽ chạy trên bất kỳ hệ thống nào mà API HAL được cung cấp, nhưng tôi đã nói rõ hơn vì điều này rõ ràng đang gây nhầm lẫn. Ngoài ra, Bạn không chuyển mã trên PC sang PC khác trừ khi bạn chuyển qua hệ điều hành như hệ thống Mac hoặc Unix. Đối với môi trường windows, nơi hầu hết các trò chơi chạy, đó là trình điều khiển phần cứng đã xử lý việc này cho bạn, bạn tạo bộ đệm dữ liệu DirectX hoặc OpenGL thông qua các cuộc gọi trình điều khiển và phần cứng biết phải làm gì từ đó.
James
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.