Tôi đang viết một trò chơi bằng C# 2010 và XNA 4.0. Tôi muốn nó trở thành một trò chơi hay và không phải là một thứ "chỉ là một crap" và vì vậy một trong những mục tiêu của tôi là tốc độ khung hình tốt. Đối với điều này tôi muốn hỏi bạn một số lời khuyên, có thể là XNA liên quan hoặc C# liên quan - những gì tôi có thể làm để tăng tốc độ mã của tôi và do đó cải thiện FPS.Hiệu suất trò chơi XNA
Dưới đây là một số nội dung tôi phát hiện ra:
- (C#) sử dụng
array
insted củalist<>
sẽ cải thiện hiệu suất rất nhiều, trong trường hợp bạn muốn truy cập số lượng lớn dữ liệu (hoặc thậm chí rất nhiều: có một mảng 20.000 mặt hàng đã gần như 180% FPS của danh sách 20000. - (C#) sử dụng
for
thay vìforeach
sẽ cải thiện hiệu suất. Vào cùng 20000 yếu tố nó giống như 5-10% sự khác biệt. - (XNA và C#) phương pháp gọi hiệu suất chi phí, vì vậy khi tôi phân đoạn mã của tôi thành meth ods những gì được gọi là phương pháp khác và như vậy, và tất cả mọi thứ đã được như vậy mát mẻ và đối tượng theo định hướng nó đã được trên chi phí 1-3 FPS mỗi cuộc gọi.
- (xna) cập nhật so với vẽ: không có sự khác biệt về hiệu suất khi tôi đặt mã vào bản cập nhật() và vẽ(), vì vậy nếu bạn không quan tâm nhiều, bạn không phải đặt một số phương thức đang cập nhật() thay vì giữ tất cả mọi thứ với nhau trong draw() với hy vọng FPS tốt hơn.
- (xna) không có ý tưởng nếu đó là tôi hoặc chỉ 4.0, nhưng khi bạn tải một .X với rất nhiều kết cấu trong nó và khá phức tạp mắt lưới, phải mất rất nhiều thời gian để tải. Tôi đã phải viết trình nạp .X của riêng tôi và trình kết xuất lưới/mô hình chỉ vì XNA bắt đầu tải kết cấu cho mỗi và mỗi tam giác bất kể kết quả trước đó có cùng kết cấu với nó hay không. Ngay cả khi viết trình tải nội dung của riêng tôi mà lưu trữ kết cấu cho bạn là không có giải pháp, bởi vì nó vẫn được sử dụng rất nhiều lần. Nếu bạn làm một cái gì đó tốt đẹp và mịn, tôi đề nghị sử dụng
drawuserprimitives
và không phảiModel
lớp học. (không có ý tưởng nếu nó là 4.0 chỉ, hoặc 3.1 có vấn đề hiệu suất như vậy quá) - (xna và C#) Cố gắng tránh sử dụng "mới" khi nó là về bản vẽ. Tôi thấy một số mã xung quanh trên web, những gì đã được sao chép/dán lại với nhau và đã có "basicEffect = new BasicEffect (graphicsDevice);" và sự xấu xí như vậy trong bản vẽ() và thậm chí tệ hơn: trong các lần lặp bên trong draw(). Như vậy sẽ giết hiệu suất. Thay vì điều này có một lớp như vậy trong "trò chơi" hoặc trong một lớp tĩnh. Điều này cũng áp dụng cho các "temp-objects" khác: xấu xí nhưng tôi nghĩ tốt hơn là tạo ra một cái gì đó toàn cầu và sử dụng nó với sự chú ý sau đó để tạo ra một mã đẹp và mượt mà sẽ làm cho trò chơi của chúng ta vì bộ thu gom rác.
Ok, vậy để làm cho câu chuyện dài ngắn, xin vui lòng gửi một số lời khuyên tốt ở đây, vì vậy tôi/chúng tôi có thể làm cho trò chơi tốt, nhanh chóng và tối ưu hóa;)
Cảm ơn trước: Zéiksz
Có vẻ như một ứng cử viên CW tốt :) – BlackBear
Tôi khuyên bạn nên tạo một wiki cộng đồng này. – Ben
Tôi không mua điều đó bằng kiến trúc OOP rắn chi phí 1-3 fps mỗi cuộc gọi ... – Blindy