2012-01-11 9 views
5

Tôi đang tạo một trò chơi 2D đơn giản cho Windows Phone 7 (Mango) bằng cách sử dụng Khung XNA.Làm thế nào tôi có thể tránh các int/float/double cast thường xuyên khi phát triển một ứng dụng XNA?

tôi đã thực hiện những quan sát sau:

  • Hầu hết các hoạt động vẽ chấp nhận float s
  • SpriteBatch.Draw chấp nhận một Rectangle trong đó sử dụng int s
  • Lớp Math chấp nhận double s như các thông số và cũng trả về double s

Vì vậy, mã của tôi có đầy đủ các kiểu chữ giữa int s, float s và double s. Đó là một địa ngục rất nhiều dự đoán.

Có cách nào tôi có thể loại bỏ chúng hoặc tôi chỉ nên không quan tâm về điều này?

Ngoài ra, các loại dự đoán này có thể trình bày tổn thất hiệu suất có thể đo lường không?

+1

Nếu có thể, hãy sử dụng lớp XNA 'MathHelper'. Nó có một số phương pháp và hằng số được nổi. http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.mathhelper%28v=XNAGameStudio.40%29.aspx – SomeWritesReserved

+0

Hm, rất hay! :) Chỉ những thứ còn thiếu là hàm lượng giác. – Venemo

Trả lời

2

Tôi cũng nhận thấy điều này nhưng trừ khi bạn nhận thấy bất kỳ sự giảm tốc độ nào, nó có thể được coi là tối ưu hóa vi mô. Chuyển đổi giữa các số floatint tương đối đắt trong khi chuyển đổi giữa floatdouble là giá rẻ. Vì vậy, bất cứ nơi nào bạn không cần thực hiện chuyển đổi float sang int, bạn có thể tránh nó. Loại truyền thường rẻ hơn chuyển đổi thực tế (ví dụ: sử dụng Convert.ToInt32). Tuy nhiên, tất cả điều này không phải là một nút cổ chai trừ khi bạn thực hiện nó nhiều lần. Ngoài ra, từ this post:

  • float, double và int phép nhân có hiệu suất tương tự ==> sử dụng đúng loại số cho ứng dụng của bạn, không phải lo lắng
  • điện thoại là 4x đến 10x chậm hơn so với PC tôi sử dụng để phát triển ứng dụng của mình ==> thử nghiệm bằng điện thoại thực, không tin cậy máy tính của bạn cho hoạt động toán học
  • phân chia chậm hơn gấp 8 lần so với phép nhân! ==> không sử dụng các bộ phận, ví dụ: cố gắng sử dụng 1/a rồi nhân

Số không chính thức, nhưng tôi nghĩ phương pháp cuối cùng là phương pháp được chấp nhận. Ngoài ra, tăng gấp đôi thường được cho là chậm hơn so với phao, nhưng điều này đi xuống đến hệ thống nó đang chạy trên. AFAIK, Windows Phone được tối ưu hóa để sử dụng doubles, điều này sẽ giải thích cho lớp học Math chấp nhận.

Tất cả trong tất cả, tôi muốn nói rằng khá phổ biến khi thấy quá trình truyền xảy ra khá một chút với khung công tác XNA. Tất nhiên, nó nên tránh bất cứ khi nào có thể, nhưng nó không phải là nguồn tắc nghẽn cho trò chơi trừ khi bạn cần thực hiện thường xuyên, trong trường hợp các khu vực khác có thể dễ dàng tối ưu hơn (hoặc thiết kế lại cấu trúc trò chơi có thể được yêu cầu).

+0

Cảm ơn câu trả lời của bạn! :) Tôi mới làm quen với XNA và bằng cách nào đó tôi cảm thấy "có lỗi" bởi tất cả những kiểu máy in đó. Và vâng, tôi đang thử nghiệm trên điện thoại thực tế (Nokia Lumia 800) và tôi không thấy bất kỳ vấn đề về hiệu suất nào. – Venemo

0

Nếu bạn đang lo lắng về việc chuyển đổi hình chữ nhật, có quá tải mà mất Vector2 thay thế, đó là float-based:

http://msdn.microsoft.com/en-us/library/ff433988.aspx

Note nguồn (texture) vẫn được một hình chữ nhật nhưng đây là thường là một từ khóa tĩnh (không phải từ khóa C# static nhưng không thay đổi, không động).

+0

Tôi biết có quá tải như vậy, nhưng trung thực tình trạng quá tải phải mất một hình chữ nhật là rất thuận tiện hơn để sử dụng hầu hết thời gian. :) – Venemo

+1

Không đồng ý, nhưng đó là một cách kỹ thuật để tránh chúng. –