2009-02-05 60 views
50

Về phát triển PC (trừ Xbox và Zune),So sánh giữa XNA và DirectX (C#)

Sự khác nhau giữa XNA và C# DirectX là gì? C# DirectX có một lợi thế đáng kể so với XNA (về tốc độ, tiền bản quyền, vv)?

Hai cách so sánh với tốc độ C++ DirectX không được quản lý như thế nào?

Ngành đang di chuyển về mặt lập trình trò chơi ở đâu?

Trả lời

50

Nếu bạn thực sự giỏi viết mã không được quản lý, thì có thể bạn sẽ có thể viết một công cụ đồ họa nhanh hơn trên DirectX. Tuy nhiên, đối với người có sở thích, XNA có nhiều hiệu suất, cả về phát triển trò chơi 2D và 3D.

Here is a good Channel 9 video nơi họ chạy trò chơi đua xe được xây dựng trên XNA trên Xbox 360. Nó chạy tốt ngay cả ở chế độ HD đầy đủ. Một số trò chơi XBox Live Arcade đã được phát triển bởi cộng đồng XNA.

Theo như C# DirectX, khi tôi gọi lại, Quản lý DirectX như được gọi, không còn được hỗ trợ chính thức vì XNA về cơ bản sẽ thay thế nó. Tôi có thể sai, đã lâu lắm rồi kể từ khi tôi nhìn nó.

Sự khác biệt về hiệu suất là không đáng kể giữa XNA và Managed DirectX vì thực chất chúng là cùng một thứ; XNA chỉ có một vài bit tiện lợi để giảm số lượng mã soạn sẵn mà bạn cần phải viết.

+0

Cảm ơn Soviut này. –

15
  1. XNA và DirectX là những triển khai rất khác nhau để giải quyết cùng một vấn đề - lập trình đồ họa chuyên sâu hiệu suất cao. Cả hai đều hỗ trợ các thành phần 2D, 3D, âm thanh và mạng. DirectX không được quản lý chỉ khi XNA được quản lý mã.
  2. Có một triển khai được quản lý của DirectX là một trình bao bọc xung quanh các cuộc gọi DirectX nhưng không được cập nhật sau bản phát hành hiện tại vì vậy tôi sẽ không bận tâm với nó.
  3. XNA không phải là trình bao bọc xung quanh DirectX không được quản lý. Nó sử dụng các phần của DirectX nhưng nó không phải là một trình bao bọc. Tôi nói rằng bởi vì tất cả các công ty động cơ lớn vẫn đang mã hóa trong C++, ASM và hỗ trợ DirectX (hoặc chỉ duy nhất hoặc kết hợp với OpenGL cho các phiên bản Linux/Mac). Thực tế, Microsoft đang "bỏ" trình bao bọc được quản lý DirectX và yêu cầu mọi người sử dụng các chương trình XNA, đó là nơi họ đang đẩy các nhà phát triển được quản lý.
+0

Um, cái gì? XNA - đó là một trình bao bọc. – TraumaPony

+4

Không, không phải - xem http://xnarocks.spaces.live.com/blog/cns!CDFDED0A2593C8E1!172.thử nếu bạn cần làm rõ trên đó. Chỉ cần đưa ra một bản đồ hàm mẫu 1: 1 bao bọc nhanh. Làm thế nào để các công cụ đường ống trong bản đồ XNA 2.0 để DirectX? Nó không. Nó không phải là một wrapper. –

+2

+1, XNA là thư viện trò chơi mã được quản lý cấp cao hơn được viết trên đầu DirectX. Đối với nhiều thứ, nó thậm chí không sử dụng các lớp/cấu trúc DirectX nhưng cuộn nó là riêng, đáng chú ý nhất là ma trận, vectơ, và một số khác ... –

30

Công cụ Xna Game Studio tập trung giải quyết các vấn đề tập trung vào trò chơi, mặc dù tôi đặt câu hỏi rằng hiệu suất của trò chơi Xna là tồi tệ hơn x.

Một nhóm độc lập bên ngoài của MS đã tạo ra một dự án có tên SlimDX - http://slimdx.mdxinfo.com/ Nếu bạn đang viết một ứng dụng chứ không phải là một trò chơi (mà tôi hy vọng bạn không phải là bởi những câu hỏi khác) thì đó có thể là đáng xem xét. Ngành công nghiệp vẫn sử dụng rất nhiều C++ cho các trò chơi, nhưng đã có những phiên bản thành công của trò chơi được viết bằng mã hoàn toàn được quản lý bằng XNA Game Studio trên phần trò chơi cộng đồng của XBox, và được phát hành trên XBox Arcade. Nên có một số số liệu thống kê thú vị sắp ra mắt khá sớm về số lượng người đã thực hiện trên các trò chơi cộng đồng.

Nhiều trò chơi giá đầy đủ sử dụng C++ cho một số, nhưng giống như Lua cho logic trò chơi thực tế ... và Lua không được biết đến với tốc độ nhanh!

C# có đường cong học tập tốt và được sử dụng bởi các công cụ lập trình trong ngành - đó sẽ là một ngôn ngữ hữu ích có trong vành đai của bạn. C++ sẽ là một ngôn ngữ tuyệt vời để có, nhưng nó đòi hỏi nhiều kỷ luật hơn để tạo ra mã chức năng - và cung cấp cho một người mới nhiều sợi dây hơn để treo mình. C# có thể tự động thay đổi và thực hiện những thứ như vòng tuần hoàn trong thời gian chạy thay vì biên dịch thời gian - C# tốt có thể nhanh hoặc nhanh hơn C++ dễ đọc - nhưng bạn phải biết cách sử dụng nó. Trong các vòng thực sự chặt chẽ, C++ và Assembler có thể thắng trong một số trường hợp nhất định. Thông thường trong các trò chơi sử dụng C++, các trình phân bổ tùy chỉnh được tạo ra với các chiến lược bộ nhớ riêng của chúng để thử và phân mảnh do các trình phân bổ bình thường gây ra ... điều đó được xử lý bởi CLR trong .Net/C# và miễn là bạn lập trình sức mạnh thu gom rác (giống như bạn sẽ phải làm với việc thực hiện C++ của riêng bạn) thì bạn không phải quan tâm đến chính mình với chi tiết thực hiện mức thấp như vậy trong .Net.

Nếu bạn đang tìm cách phát triển trò chơi và quyết định ngôn ngữ (trong đó, đọc giữa các dòng có vẻ như bạn đang đi với dòng câu hỏi đó) thì ngôn ngữ tốt nhất để sử dụng là bạn có một dự án đã hoàn thành để hiển thị ở cuối của nó, có thể là C++, mục tiêu C, C#, Flash, Silverlight, v.v. Khi ngôn ngữ thay đổi và vào và ra, các nhà tuyển dụng thường tìm kiếm các chủ đề đã được chứng minh có thể giảm thiểu việc không biết người mà họ hiện đang sử dụng - và một danh mục hoàn thành công việc sẽ làm điều đó.

+1

"Tôi sẽ đặt câu hỏi bất kỳ áp phích nào nói rằng hiệu suất của các trò chơi studio của Xna là tồi tệ hơn x trực tiếp được quản lý mà không thấy một số chỉ số phù hợp. " Tôi biết đó là một vài năm sau nhưng bài đăng này vẫn nhận được rất nhiều lượt xem, cuộc gọi vẽ XNA chậm hơn khoảng 6 lần so với cuộc gọi SharpDX và chậm hơn 4 lần so với cuộc gọi slimdx: http://code4k.blogspot.co.uk/2011/ 03/benchmarking-cnet-direct3d-11-apis-vs.html –

+0

cũng có vẻ như bằng chứng phong nha :) Liên kết tốt @STRAIGHTOUTTACOMPTON – paulecoyote

+0

@STRAIGHTOUTTACOMPTON ** Lưu ý tới các googlers **: _ [Cập nhật 2012/05/15: Lưu ý rằng mã ban đầu đã được tinh chỉnh cho một cấu hình cụ thể và ** có thể không cho bạn kết quả tương tự **. Tôi đã ** viết lại ** mẫu này để cung cấp thêm ** kết quả chính xác và có thể dự đoán được **. ** So sánh với XNA cũng không công bằng và không chính xác **, bạn nên có thứ gì đó như x4 chậm hơn thay vì x9. Phiên bản mới nhất của SharpDX 2.1.0 cũng thấp hơn x1.35 so với C++ ngay bây giờ. Bản cập nhật của bài viết này sẽ theo dõi trên trang web sharpdx.org mới] (http://code4k.blogspot.co.uk/2011/03/benchmarking-cnet-direct3d-11-apis-vs.html) _ – MickyD

5

Hiện tại, có vẻ như Microsoft không có kế hoạch hỗ trợ XNA trong các ứng dụng kiểu Metro. Giải pháp thay thế cho XNA và "DirectX được quản lý" hiện không được chấp nhận là SharpDx. Điều này có thể được sử dụng để tạo các ứng dụng kiểu Metro và được ưu tiên benchmarked đối với gói mã XNA, SlimDX và API cửa sổ.