Làm cách nào để các nhà phát triển trò chơi nhắm mục tiêu vào nhiều nền tảng (Xbox 360, PS3, PC và Linux)?


8

Làm thế nào để các nhà phát triển trò chơi nhắm mục tiêu nhiều nền tảng cùng một lúc? Ví dụ: Xbox 360, PS3, PC và Linux. Đối với các trò chơi 2D, có thể nhắm mục tiêu đến iPhone không? Tôi quan tâm đến các công cụ được sử dụng (2D / 3D, v.v.), cách thiết lập đường ống xây dựng và nói chung có thể tập trung bao nhiêu "mã lõi" mà không phải viết các nhánh mã cụ thể của nền tảng.

Hoặc, nếu các thân mã hoàn toàn riêng biệt thường được duy trì cho mỗi nền tảng, các thư viện / mã được sử dụng lại như thế nào (về mặt liên kết và mô đun hóa)?

Câu trả lời:


11

Để phát triển trò chơi bảng điều khiển thương mại, việc thiết lập một hệ thống xây dựng để nhắm mục tiêu 360, PC và PS3 đồng thời gây khó chịu nhưng không đặc biệt khó khăn. Bộ công cụ 360 dev đơn giản là một mục tiêu mới cho Visual Studio + một số công cụ và sử dụng trình biên dịch rất giống với trình biên dịch MSVC ++ tiêu chuẩn của Windows. PS3 sử dụng trình kết thúc trình biên dịch GCC nhưng dễ dàng cắm vào giao diện người dùng trực quan. Đối với trò chơi và mã tiện ích chung, thông thường có thể có mã giống nhau đến 99% giữa 3 nền tảng. Có một số điểm không tương thích giữa GCC và MSVC ++, nhưng may mắn thay, nếu bạn làm việc với linux (giả sử bạn sử dụng phiên bản gcc gần với phiên bản PS3) sẽ không gặp quá nhiều rắc rối. 1% mã cuối cùng khác với thông thường bạn có thể sửa với kydgy #defines.

Qua các bước xây dựng cơ bản, trở ngại lớn sẽ là hệ thống đồ họa cũng như bất kỳ yếu tố hiệu suất cao nào trong trò chơi của bạn. Đối với những yếu tố này, bạn thực sự sẽ kết thúc việc viết mã tùy chỉnh nền tảng hoặc sử dụng một công cụ hiện có. Bộ nhớ sẽ là một vấn đề lớn nhưng đó là một câu hỏi khác. Một dự án thương mại mà tôi đã làm việc có thể có được các phiên bản console của một nguồn PC ban đầu khá dễ dàng, nhưng làm cho chúng thực sự hoạt động tốt là một vấn đề hoàn toàn khác.

Nếu bạn muốn tích hợp iPhone, bạn có thể muốn sử dụng một số giải pháp công cụ / phần mềm trung gian hiện có. Thiết lập iPhone của openGL + object C không thực sự phù hợp với bất kỳ nền tảng nào khác. Đó là một sự lựa chọn rất lớn đối với phần của Apple, vì họ không khuyến khích việc sử dụng phần mềm trung gian được giải thích trong bất kỳ ứng dụng iPhone nào.


Các vấn đề lớn nhất (ngoài hiệu suất chung) có thể sẽ luôn xảy ra với những thứ chạm vào hệ thống tập tin. Giữa PC, 360 và PS3, bạn có 3 API hệ thống tệp gần như loại trừ lẫn nhau> _ <
coderanger

Vâng, đồ họa, hiệu suất và bất kỳ API cụ thể nào khác của hệ thống như hệ thống tệp hoặc những thứ như thành tích và công cụ mạng.
Ben Zeigler

Tôi biết đây là một câu hỏi cũ, nhưng còn boost :: filesystem cho API hệ thống tập tin thì sao?
rwols

3

Đối với hầu hết các nền tảng, bạn có thể viết các hệ thống con tách biệt với các API cụ thể được sử dụng để gọi ra và lấy lại thông tin từ nền tảng bạn đang chạy. API IO thường dễ trừu tượng nhất - tất cả các hệ thống tệp hoạt động trên một số giả định khá cơ bản về mở, đóng và đọc từ các tệp, ngay cả khi bạn tính đến việc gọi không đồng bộ. Sau đó, bạn có các hệ thống cốt lõi của mình như đọc đầu vào của bộ điều khiển, truy vấn thời gian, truy cập vào bộ nhớ và các luồng gốc, hầu hết đều hoạt động theo cùng một cách.

Ngay cả đồ họa có thể được trừu tượng hóa ở một mức độ lớn, và thực sự trong hầu hết các công cụ tốt. Nhưng bạn phải đóng gói những thứ 'có thể kết xuất' vào các hộp đen nơi bạn không được phép biết những gì đang diễn ra bên trong chúng. Bạn biết rằng bạn có một "thứ" mà bạn kết xuất ở một vị trí cụ thể trên thế giới. Bạn không biết nó được kết xuất như thế nào, chỉ có vậy thôi. Và lớp trừu tượng đồ họa sẽ chăm sóc tất cả các chi tiết của việc đưa nó lên màn hình. Các đường ống xây dựng cụ thể của nền tảng đóng gói dữ liệu đồ họa theo cách mà nó có thể được tham chiếu từ động cơ mà không thực sự biết nó được thể hiện như thế nào trong nội bộ.

Mặc dù vậy, tất cả những gì đã nói, khi nói đến việc thực sự vận chuyển một trò chơi, có một số phần nhất định mà bạn không thể trừu tượng hóa. Sẽ thật nực cười khi nghĩ rằng bạn có thể gửi cùng một mã trên iPhone như trên 360 hoặc PS3, vì các cơ chế đầu vào, cách vận hành cơ bản và khả năng của nền tảng là quá khác nhau. Bạn có thể tạo một tiêu đề có kích thước iPhone trên 360, nhưng nó sẽ phải giới hạn các cơ chế đầu vào của nó chỉ ở những cơ chế mà 360 có thể hỗ trợ. Vì vậy, một con trỏ ảo trên màn hình mô phỏng ngón tay và có thể sử dụng cần điều khiển nơi sử dụng đầu vào gia tốc kế 3D.

Một cách hợp lý hơn, các phần của trò chơi có thể được viết theo cách có thể sử dụng lại và các mô-đun mã riêng lẻ có thể được chuyển giữa các nền tảng, mặc dù phần lớn tiêu đề là khác nhau. Ví dụ: nếu bạn có một máy trạng thái AI, điều đó không thực sự quan tâm đến việc nó chạy trên 360, PC hay iPhone. Trò chơi của bạn sẽ sử dụng nhiều thành phần như vậy và miễn là chúng được thiết kế tốt để chúng có đầu vào và đầu ra được xác định rõ, thì phần còn lại của trò chơi có thể được bọc xung quanh chúng, bất kể nền tảng và tránh phải viết lại chúng các thành phần.

Khả năng sử dụng lại đó là chìa khóa cho sự phát triển đa nền tảng, không tìm kiếm một công cụ phù hợp với một kích thước hoạt động trên tất cả các nền tảng. Ngay cả khi một thứ như vậy tồn tại, nó sẽ bị tê liệt do phải làm việc với mẫu số chung thấp nhất, nó sẽ không được sử dụng nhiều để tạo ra các trò chơi.


0

Một cách là sử dụng một công cụ nhiều khối như Torque hoặc Unity3D . Nhưng tôi không nghĩ rằng họ làm việc trên tất cả các bản đồ. Cũng có một cách khác: phát triển một động cơ ...

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.