Học XNA 3.1 Vs XNA 4.0


7

Tôi đang bắt đầu học XNA và nó sẽ diễn ra suôn sẻ. Tuy nhiên, tôi tự hỏi nếu tôi tự bắn vào chân mình bằng cách học 3.1 chứ không phải 4.0?

Tôi cũng biết rằng Microsoft rõ ràng có mâu thuẫn về vấn đề: chúng tôi càng cập nhật nhiều bản sao Visual Studio mà họ bán hơn (tôi biết express là miễn phí nhưng một số sẽ trở nên chuyên nghiệp). Vì vậy, người ta phải đọc giữa các dòng của blog loại "MASSIVE NEW TÍNH NĂNG NÂNG CẤP NGAY" từ các nhân viên của MS.

Tôi biết về những gì mới: http://msdn.microsoft.com/en-us/l Library / bb417503.aspx , và đó dường như chủ yếu là điện thoại, giao diện và tính năng video - điều mà tôi không quan tâm lắm - Tôi là nhiều hơn làm các công cụ 3D cốt lõi.

Điểm hấp dẫn là: Tôi đã có Visual Studio 2008 chuyên nghiệp và không muốn nhận VS 2010 nếu có một chút khác biệt trong lập trình trò chơi trong 4.0.

Thế giới đã chuyển sang? Là những gì tôi đang học trong 3.1 sẽ trở nên dư thừa?

Ngoài ra còn có sự khác biệt về mã trong các thư viện, nhưng chúng không phải là chính, nhiều trong số chúng có thể được nhìn thấy ở đây: http://www.nelxon.com/blog/xna-3-1-to-xna-4-0-chcoateet / , ví dụ như cái này mà tôi phải tìm ra so với Riemers Tut:

XNA 4.0

 protected override void Draw(GameTime gameTime)
 {
     device.Clear(Color.DarkSlateBlue);

     RasterizerState rs = new RasterizerState();
     rs.CullMode = CullMode.None;
     device.RasterizerState = rs;

     effect.CurrentTechnique = effect.Techniques["ColoredNoShading"];
     effect.Parameters["xView"].SetValue(viewMatrix);
     effect.Parameters["xProjection"].SetValue(projectionMatrix);
     effect.Parameters["xWorld"].SetValue(Matrix.Identity);
     foreach (EffectPass pass in effect.CurrentTechnique.Passes)
     {
         pass.Apply();

         device.DrawUserPrimitives(PrimitiveType.TriangleList, vertices, 0, 1, VertexPositionColor.VertexDeclaration);
     }

     base.Draw(gameTime);
 }

XNA 3.1

protected override void Draw(GameTime gameTime)
{
    device.Clear(Color.DarkSlateBlue);

    device.VertexDeclaration = new VertexDeclaration(device, VertexPositionColor.VertexElements);
    device.RenderState.CullMode = CullMode.None; // TODO only for testing!
    device.RenderState.FillMode = FillMode.Solid;

    effect.CurrentTechnique = effect.Techniques["ColoredNoShading"];
    effect.Parameters["xView"].SetValue(viewMatrix);
    effect.Parameters["xProjection"].SetValue(projectionMatrix);
    effect.Parameters["xWorld"].SetValue(Matrix.Identity);

    effect.Begin();
    foreach (EffectPass pass in effect.CurrentTechnique.Passes)
    {
        pass.Begin();
        device.DrawUserIndexedPrimitives<VertexPositionColor>(PrimitiveType.TriangleList, vertices, 0, 5, indices, 0, indices.Length / 3);
        pass.End();
    }
    effect.End();

    base.Draw(gameTime);
}

Thực sự không có vấn đề gì nếu bạn đang cố gắng phát triển cho PC hoặc XBOX360, nhưng tại sao bạn không lấy VS2010 Express và sử dụng 4.0?
TravisG

Có rất ít sự khác biệt.
Vịt Cộng sản

Lần trước tôi đã kiểm tra, MS đã ngừng chấp nhận 3,1 ứng dụng.
3Dave

@David bạn có thể làm rõ - điều gì ngăn tôi phân phối ứng dụng 3.1? (có những lợi ích: cơ sở khách hàng của tôi sẽ có nhiều khả năng có .Net 3.5 SP1 hơn 4.0). Tôi đang nói bạn có nghĩa là một số loại thị trường ứng dụng XBox - điều đó không phải lo lắng cho tôi bây giờ tôi chỉ học cách viết trò chơi trên PC.
markmnl

1
@Feanor (xin lỗi - Tôi không thể gõ ô) Không có gì ngăn bạn phân phối ứng dụng 3.1 cho Windows; nhưng, nếu bạn muốn gửi ứng dụng XBox hoặc WP7 đến Trung tâm ứng dụng (để phân phối XBox Live), thì nó phải ở mức 4.0+. BTW, VS2010 là IMHO một thứ tự cường độ tốt hơn so với năm 2008; nó đáng để xem Bạn có quyền truy cập vào một thuê bao MSDN?
3Dave

Câu trả lời:


8

Tôi khuyên bạn nên sử dụng XNA 4.0.

Chắc chắn bạn có thể làm mọi thứ với 3.1 những gì bạn có thể làm với 4.0, nhưng nó đã tiến bộ khá nhiều. Ngoài các tài liệu tham khảo của bạn, bạn cũng có thể muốn xem blog của Shawn Hargreaves, ví dụ như tại bài đăng này: Phá vỡ các thay đổi trong XNA Game Studio 4.0 . Hoặc về cơ bản, bạn chỉ có thể kiểm tra các tháng 3, 4 và 5 năm 2010 trong blog của mình, chúng có đầy đủ các thay đổi XNA 4.0.

Cũng nên nhớ rằng với 3,1 bạn sẽ bị mắc kẹt với công nghệ cũ. Cuối cùng, bạn sẽ muốn nâng cấp lên XNA 5/6 để hỗ trợ DX11 hoặc bất cứ điều gì. Tùy thuộc vào mức độ lớn / phức tạp của chương trình của bạn vào lúc đó, có thể mất một chút thời gian để nâng cấp chương trình lên 4.0 vì bạn phải thực hiện một số thay đổi.


Tôi không bị thuyết phục - EddieV223 đúng - ngôn ngữ cũng giống như vậy ngoại trừ một vài cuộc gọi api được ghi chép tốt - vì vậy sẽ không mất nhiều thời gian để chuyển đổi. Vì lợi ích của việc học, nó không liên quan cho dù mọi thứ dưới mui xe đã thay đổi. (Tôi là một lập trình viên dày dạn kinh nghiệm nên có lẽ nếu tôi đang học lập trình quá thì những thay đổi trong api sẽ ném tôi - nhưng đó không phải là trường hợp - tôi thường có thể đoán các cuộc gọi api khác nhau trước khi tìm kiếm nó).
markmnl

2
Có vẻ kỳ lạ với tôi rằng bất cứ ai cũng sẽ tự nói với mình "Bây giờ tôi sẽ học một phiên bản cũ hơn, tôi chỉ có thể nâng cấp mã của mình sau". Tại sao bạn lại lãng phí thời gian để học một cái gì đó đã cũ, khi bạn sẽ phải nâng cấp sau này cho WP7 hoặc XBox360 useage? Thực tế là bạn hiện đang học XNA nên có đủ động lực để không học thứ gì đó ngay bây giờ và phải học lại sau này.
Jonathan Connell

Có nhưng vì tôi đang tìm hiểu lý do tại sao phải quan tâm đến sắc thái của từng phiên bản - học lập trình 3D trên XNA là cùng một phiên bản 3 hoặc 4 jsut các cuộc gọi api khác nhau - không nghi ngờ gì trong một vài năm, có thể nói như vậy đối với phiên bản 4 và 5 - bạn có để bắt đầu ở đâu đó và không lãng phí thời gian, nó cũng giống như vậy ngoại trừ một vài cuộc gọi api khác nhau mà từ đó đến giờ tôi có thể thấy là lớp phủ đường để tắt một số điều có thể có trong 3. Dù sao tôi cũng sẽ nhận được câu trả lời đa số là câu trả lời nhưng sẽ tiếp tục học 3 - cuộc thảo luận này có thể giúp những người khác có cùng câu hỏi.
markmnl

2

Để lập trình viên 3.1 và 4 gần giống nhau. Những thay đổi chính là tạo ra một thiết bị và spritebatch. Và nơi Trình quản lý nội dung, nó được chuyển vào dự án riêng của mình bên trong giải pháp. Mọi thứ khác là khá nhiều như nhau. Những thay đổi này chỉ là một vài dòng mã khác nhau. Đằng sau hậu trường mặc dù nó sử dụng các cuộc gọi api directx khác nhau.

Vì vậy, để trả lời bạn câu hỏi bạn không tự bắn vào chân mình. Sử dụng XNA đã không thay đổi nhiều từ quan điểm của các lập trình viên từ ngay cả các phiên bản 1.0.

Có rất nhiều mánh gian lận trên mạng để tìm kiếm câu trả lời nhanh về việc chuyển đổi 3.1 - 4.0 như thế này http://www.nelxon.com/blog/xna-3-1-to-xna-4-0-chcoateet / .


1
Nói rằng nó đáng để học 3.1 và sau đó học lại 4.0 là một sự giả dối hoàn toàn; nó sẽ chỉ gây nhầm lẫn và khiến các lập trình viên dành nhiều thời gian hơn để học điều tương tự.
Tấn

@AttackingHobo tôi không bị thuyết phục - EddieV223 đúng - ngôn ngữ chỉ giống nhau ngoại trừ một vài cuộc gọi api được ghi chép tốt - vì vậy sẽ không mất nhiều thời gian để chuyển đổi. Vì lợi ích của việc học, nó không liên quan cho dù mọi thứ dưới mui xe đã thay đổi. (Tôi là một lập trình viên dày dạn kinh nghiệm nên có lẽ nếu tôi đang học lập trình quá thì những thay đổi trong api sẽ ném tôi - nhưng đó không phải là trường hợp - tôi thường có thể đoán các cuộc gọi api khác nhau trước khi tìm kiếm nó).
markmnl

Ngôn ngữ giống nhau vì C # của nó. Nhưng XNA 3 khác với XNA 4. Trừ khi bạn cần sử dụng các thư viện hoặc công cụ cụ thể cũ hơn, thật lãng phí thời gian để tìm hiểu các chi tiết cụ thể của XNA 3 thay vì học trực tiếp XNA 4.
Tấn

"XNA 3 khác với XNA 4. Trừ khi bạn cần sử dụng các thư viện hoặc công cụ cụ thể cũ hơn" - nhưng không phải vậy! các thư viện giống nhau, một số trong số chúng, được cập nhật một chút - chúng vẫn có cùng tên và thường có cùng phương thức - có thể có một cách gọi / sử dụng chúng hơi khác nhau, dễ hiểu như trong ví dụ của tôi trong câu hỏi Đáng chú ý có thể có một số tính năng DirectX10 tôi sẽ bỏ lỡ - nhưng một lần nữa vì lợi ích của việc học có thể chờ đợi!
markmnl

3
@ Fëanor "Vì lợi ích của việc học có thể chờ đợi!". Bạn không muốn "lãng phí thời gian" tải xuống và cài đặt VS2010 và XNA 4.0, nhưng bạn không ngại lãng phí thời gian để học một cái gì đó đã lỗi thời? Lạ thật ...
Jonathan Connell
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.