2012-02-07 25 views
13

Tôi biết không có loại dự án VB.Net nào cho các trò chơi XNA nhưng là một bài kiểm tra đơn giản, tôi đã ném cùng một giải pháp VB tham khảo Microsoft.XNA.*. Nó có một lớp thực hiện Microsoft.XNA.Framework.Game. Sau đó, trong C# Game1.cs, tôi chỉ đơn giản là loại bỏ tất cả các mã soạn sẵn và sửa đổi nó để kế thừa từ lớp VB của tôi ...Tại sao bạn không thể phát triển trò chơi XNA trong VB.Net?

namespace MyGame { 
    public class Game1 : GameEngine.Engine { 
    } 
} 

Đó là kế thừa ...

Public Class Engine 
    Inherits Microsoft.Xna.Framework.Game 

    Protected Overrides Sub Update(GameTime As Microsoft.Xna.Framework.GameTime) 
     If GamePad.GetState(PlayerIndex.One).Buttons.Back = ButtonState.Pressed Then 
      Me.Exit() 
     End If 

     For Each Element In Elements 
      Element.Update(GameTime) 
     Next 

     MyBase.Update(GameTime) 
    End Sub 

    ... 

Điều này dường như làm việc và Tôi đã có thể tải nội dung, hiển thị mô hình, nhập đầu vào gamepad, v.v ...

Vì vậy, những gì tôi hỏi là ... Có thực sự hạn chế do một số tính năng nâng cao không được hỗ trợ trong VB. Net hoặc là nó chỉ đơn thuần là không có dự án mẫu/hỗ trợ có sẵn?

Có một số tối ưu hóa hiệu suất khi biên dịch thành MSIL mà trình biên dịch VB không?

+4

câu hỏi thú vị – Devjosh

+1

Tôi vừa tình cờ gặp http://blogs.msdn.com/b/vbteam/archive/2011/05/25/vb-support- for-the-xna-platform.aspx giải thích rằng XNA có/sẽ hỗ trợ VB – Basic

Trả lời

14

VB.NET và C# cả biên dịch cho cùng một MSIL ở cấp ngữ nghĩa, do đó, nó không phải là giới hạn kỹ thuật. Như bạn đã thấy, nó không quá khó để hack cùng một ứng dụng VB.NET truy cập XNA.

Hạn chế chỉ đơn giản là vì các ví dụ phải được viết bằng một ngôn ngữ cụ thể bởi một người và hầu hết các nhà phát triển trò chơi chuyên nghiệp sẽ đến từ nền C++. Đó là giới hạn nguồn nhân lực - họ chỉ có thể viết rất nhiều mã mẫu.

Ngoài ra còn có một số performance differences between C# and VB.NET, có thể đã góp phần vào quyết định của Microsoft.

Cập nhật: Nó cũng chỉ ra rằng VB.NET doesn't support unsafe code. Bạn thường sẽ tìm thấy các trường hợp mã không an toàn là cần thiết trong lập trình trò chơi, vì lý do hiệu suất. Tôi có cảm giác rằng quyết định của Microsoft đã được đưa ra dựa trên một danh sách các lý do phức tạp.

+0

Cảm ơn câu trả lời hữu ích - Tôi luôn biết về mã không an toàn nhưng không nhận ra ý nghĩa - bạn có thể đưa ra ví dụ về khi nào được dùng? Tôi đoán thao tác hình ảnh nhanh hơn/tương tự? Tôi sẽ để điều này mở một lúc để xem có lý do nào khác không. – Basic

+0

Toán học không an toàn là khá nhanh hơn một chút, do đó, để thực hiện shader trong C# và xử lý hình ảnh, đó là một cải tiến hiệu suất tuyệt vời. Bạn cũng sẽ tìm thấy mã không an toàn khi giao dịch với các thư viện bên ngoài mà phải được gọi trong một vòng lặp chặt chẽ - p/gọi phí trên là khá cao đối với mã an toàn. – Polynomial

+0

Cảm ơn - Tôi nghĩ rằng tôi sẽ có một đi với ném một cái gì đó với nhau và xem nó như thế nào đi. Trường hợp xấu nhất, tôi luôn có thể bỏ qua mã không an toàn trong thư viện C#. – Basic

Các vấn đề liên quan