XNA có tốt cho sự phát triển chuyên nghiệp cho Xbox 360 không?


16

Tôi muốn bắt đầu phát triển cho Xbox 360 của mình và tôi đã nghe nói về khung XNA có thể nhắm mục tiêu cả PC và Xbox. Điều này nghe có vẻ là một lựa chọn hấp dẫn vì khách hàng của tôi cũng có thể sử dụng trò chơi / ứng dụng trên các máy tính bình thường.

Tuy nhiên tôi rất mới với bối cảnh Xbox. Có phải XNA chỉ dành cho phát triển sở thích và không được khuyến khích phát triển ứng dụng bán chuyên nghiệp hay doanh nghiệp? XNA có thiếu các khả năng của một giải pháp được phát triển C ++ hay làm giảm hiệu năng của trò chơi / ứng dụng chạy trên Xbox không?

Có thể nhắm mục tiêu Xbox bằng C # và không có XNA không? Các lợi thế là gì?

Lập trình cấp thấp sẽ có trong C ++ trực tiếp làm việc với DirectX. Các lợi thế là gì?

Câu trả lời:


15

Câu trả lời ngắn gọn: .

XNA chỉ là một công cụ. Nó phù hợp cho tất cả các game ngoại trừ nhiều bộ xử lý và đồ họa nhất. Nếu bạn đang xem xét XNA cho một trò chơi Xbox 360, đây là những gì bạn sẽ bỏ lỡ:

  • Truy cập vào đơn vị SIMD / Vector để thực hiện các phép toán dấu phẩy động CPU thực sự rất nhanh
  • Khả năng sử dụng mã ngôn ngữ bản địa có thể sẽ nhanh hơn một chút so với C #
  • Có khả năng là một chút chút lazier với cách bạn phân bổ bộ nhớ
  • Các trò chơi XBLIG chỉ có quyền truy cập vào 4 trong số 6 lõi (nhưng chúng tôi vẫn có cả 3 CPU và chúng cũng không phải là lõi đầy đủ, vì vậy chúng tôi không bỏ lỡ nhiều) - không chắc điều này có áp dụng cho XNA không phải XBLIG không Trò chơi
  • Truy cập DirectX đầy đủ để thực hiện thủ thuật đồ họa thực sự tối nghĩa

Có thể có nhiều hơn - đây là trên đỉnh đầu của tôi.

(Suy đoán: nếu bạn nhà phát triển chuyên nghiệp (như: có devkit), tôi nghĩ rằng bạn có thể sử dụng XNA với mã gốc, giống như P / Gọi trên Windows. Tốt nhất là cả hai thế giới. Bạn phải hỏi Microsoft. Xem thêm XDK .)

Điểm mấu chốt là một trò chơi XNA gần như nhanh như một trò chơi bản địa và có thể làm gần như nhiều thứ. Tôi khuyên bạn nên sử dụng nó trừ khi bạn tìm thấy một lý do thuyết phục không nên.

Tôi không biết có loại DirectX nào được quản lý cho 360 hay không. Có lẽ SlimDX là một nơi tốt để bắt đầu.


1
"XBLIG" là gì?
Ricket

2
Trò chơi độc lập trực tiếp trên Xbox
dotminic

Chỉ có 3 lõi và chúng tôi có quyền truy cập vào tất cả chúng. Bạn không có quyền truy cập vào 2 chủ đề. Một trong những luồng đó là dành cho XNA, luồng còn lại là luồng không ai có quyền truy cập khi tạo trò chơi, vì nó dành cho HĐH XBOX.
Olhovsky

1
Ngoài ra, bạn không được lười biếng với việc phân bổ bộ nhớ. Ngoại trừ các trò chơi rất đơn giản, bạn phải gộp tất cả các đối tượng (bao gồm mô hình loại phân bổ / miễn phí - không tốt hơn C ++) để ngăn chặn các bộ sưu tập rác đắt tiền trên .NET compact CLR, sử dụng phương pháp thu thập thế hệ.
Olhovsky

12

Trừ khi bạn sẵn sàng trả 10.000 đô la cho XBOX hoặc Playstation devkit, thì bảng điều khiển duy nhất bạn có thể phát triển là XBOX 360 và cách duy nhất bạn có thể làm là với XNA.

Để phát triển chuyên nghiệp, trừ khi bạn thực sự cần 100% khả năng xử lý của XBOX (điều mà hầu hết các trò chơi, đặc biệt là các trò chơi 2D không cần), thì theo tôi, XNA thực sự tốt hơn nhiều cho sự phát triển.

Một số sai lầm mà những người trả lời khác đã mắc phải:

XBOX chỉ có 3 lõi. Bạn có quyền truy cập vào tất cả chúng với XNA.

Mỗi lõi có siêu phân luồng và hỗ trợ cho 2 siêu phân luồng. Bạn chỉ có thể truy cập 4/6 chủ đề. Một trong những chủ đề đó là dành cho XNA. Cái còn lại là một chủ đề mà không nhà phát triển trò chơi nào có quyền truy cập, vì nó được XBOX OS sử dụng.

C # trên XBOX chậm hơn nhiều so với C # trên Windows. XBOX sử dụng CLR nhỏ gọn .NET, rất nhẹ và thiếu nhiều lựa chọn tối ưu của CLR trên máy tính để bàn. Các tính năng bảo mật XBOX ngăn các chương trình sửa đổi mã nguồn của riêng họ. Điều này làm cho rất khó để thậm chí cho phép mã .NET chạy, ít hơn nhiều để chạy nhanh . Một phần của những gì làm cho mã được quản lý cạnh tranh về hiệu năng với mã gốc C ++, là CLR có thể sửa đổi mã của chính nó để tối ưu hóa tính liên kết của bộ đệm. Nhóm phát triển XNA phải nhảy qua một số vòng khá lớn chỉ để có được C # để chạy trên XBOX, và có một chi phí hiệu suất liên quan với các vòng này.

Bạn không được lười biếng với việc phân bổ bộ nhớ. XNA trên Windows đơn giản hóa rất nhiều việc cấp phát bộ nhớ, như bạn mong đợi từ một môi trường được quản lý. Tuy nhiên, trên XBOX, .NET compact CLR sử dụng cách tiếp cận quét & thu gọn để thu gom rác và cách tiếp cận điển hình để ngăn chặn tình trạng nói lắp trong trò chơi của bạn do các bộ sưu tập, là để tránh các bộ sưu tập hoàn toàn. Điều này yêu cầu sử dụng nhóm đối tượng cho các lớp của bạn và sử dụng các cấu trúc cho các đối tượng nhỏ hơn, nơi bạn thường sử dụng các lớp trong môi trường Windows. Nhóm đối tượng thường yêu cầu một mô hình quản lý đối tượng phân bổ / miễn phí, không tệ hơn (và có thể tốt hơn một chút) so với quản lý bộ nhớ C ++.

Điều đó nói rằng, phát triển trong C # / XNA vẫn nhanh hơn và dễ dàng hơn nhiều lần so với phát triển trong C ++ mà không cần API DirectX (mà XNA là).

Đây là trạng thái của một trò chơi tôi đang thực hiện trong XNA, sau 4 tuần làm việc:

Ảnh chụp màn hình của trò chơi sau 4 tuần phát triển.

Điều đó sẽ cho bạn cảm giác về sự phát triển nhanh đến mức khó tin với thư viện / API XNA kết hợp với C #.

Ảnh chụp màn hình đó được XBOX hiển thị ở khoảng 65FPS.

Nếu bạn là nhà phát triển trò chơi có sở thích và bạn muốn tạo trò chơi cho bảng điều khiển, không chỉ XNA + XBOX là tùy chọn thực tế duy nhất của bạn, đây còn là một tùy chọn khá tuyệt vời, môi trường phát triển thú vị và nhiều trò chơi XBOX Live Arcade đã được được làm bằng XNA và kiếm được hàng trăm ngàn đô la khi làm việc đó. ( Limbo chẳng hạn.)


1
Một trong những câu trả lời rõ ràng nhất mà tôi có về XNA dev. Cảm ơn bạn.
keyle

4

XNA là con dao hai lưỡi; Nó tương đối dễ sử dụng, nhưng rất mở rộng và có thể tùy chỉnh. Vấn đề là, dựa trên một ngôn ngữ được quản lý và có triển khai Compact Framework, việc siết chặt một số hiệu suất từ ​​một trò chơi phức tạp có thể rất đau đớn và bực bội.

Bạn chỉ có thể triển khai lên Xbox thông qua C # / XNA hoặc qua C ++ / DirectX, nhưng tùy chọn thứ hai yêu cầu đủ điều kiện để có giấy phép XBLA và trả tiền cho devkit, có thể rất tốn kém (~ 10000 $).

Và hãy nhớ rằng Xbox là một hệ thống khép kín. Quên mọi tương tác TCP / IP trực tiếp, bạn chỉ có thể giao tiếp với các bảng điều khiển khác có trong Xbox Live! mạng và bạn không thể thực hiện các kết nối HTTP thô.

Vì vậy, nếu bạn đang nghĩ về một trò chơi, hãy thử XNA và chuyển sang devkit nếu bạn cần thêm sức mạnh thô (và bạn có tiền). Nếu bạn đang nghĩ về một ứng dụng ... chỉ cần nhắm mục tiêu cho một nền tảng khác.


Tôi tự hỏi XNA và devkit khác nhau như thế nào ...
Spooks

XNA là API C # cấp cao. Devkit là một bảng điều khiển đặc biệt nơi bạn có thể triển khai các trò chơi được viết bằng C ++ và DirectX, do đó có quyền truy cập cấp thấp hơn và hiệu suất tổng thể tốt hơn.
r2d2rigo

vì vậy .. hoàn toàn khác biệt
Spooks
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.