Microsoft XNA là một bộ công cụ với môi trường thời gian chạy được quản lý do Microsoft cung cấp, tạo điều kiện cho việc quản lý và phát triển trò chơi máy tính. XNA cố gắng giải phóng các nhà phát triển trò chơi bằng cách viết "mã nồi hơi lặp đi lặp lại" và đưa các khía cạnh khác nhau của sản xuất trò chơi vào một hệ thống duy nhất.
Nó được thiết kế dưới dạng khung - trên thực tế, XNA là Khung XNA của Microsoft - vì vậy về mặt kỹ thuật, đây không phải là một công cụ theo tên.
Không có 'công cụ' - nếu bạn chú ý, bạn lấy được lớp chính của mình từ XNA.Framework.Game và phải tự ghi đè các chức năng vẽ và cập nhật. Không có hệ thống kết xuất trung tâm, hoặc hệ thống đầu vào hoặc hệ thống âm thanh sẵn sàng ra khỏi hộp. Có SpriteBatch và các lớp đỉnh, có KeyboardState và có một số lớp âm thanh..nhưng chúng chỉ là trừu tượng đối với mã bản vẽ cấp thấp.
EDIT: Vì mục đích hữu ích, tại sao điều gì đó quan trọng nếu nó được gắn nhãn là công cụ, khung, thư viện hoặc bộ công cụ?
Để làm sáng tỏ mọi thứ: Tôi đang phát triển một công cụ trong XNA. Rõ ràng tôi không thể làm điều đó trong một cái gì đó như Unreal, như Jonathan đã đề cập. Tuy nhiên, có một vài điều tôi cảm thấy quan trọng là XNA không có:
Plug-n-play: Tôi muốn có thể tạo một số loại mẫu - có HP này, lưới này, hoạt hình này và BÙM! Tôi có một NPC trong trò chơi của mình.
Ẩn mức thấp - XNA đã thực hiện điều này rồi, nhưng tôi không muốn tìm hiểu thêm về GameServiceProviders. Tôi chỉ muốn xô đẩy mọi thứ với nhau.
Trò chơi tách biệt với động cơ - Có thể có một lớp 'trò chơi', nhưng tôi muốn tách logic và mã của tôi khỏi hệ thống cơ sở. Tôi không muốn if(player.hasitem(Item.SECRET_SWORD_OF_SECRETNESS)
trộn lẫn với việc cập nhật bộ đệm trên trình kết xuất đồ họa của mình.