Tôi đang định hình trò chơi 2D XNA đơn giản của mình. Tôi thấy rằng 4% của toàn bộ thời gian chạy được thực hiện bởi operarion đơn giản của việc thêm cùng hai màu sắc, một trong số họ nhân trước bằng phao.Tối ưu hóa thao tác màu sắc trên XNA
Tôi cần gọi phương pháp này rogulthy 2000 lần cho mỗi khung hình (đối với mỗi ô trên bản đồ), cho tôi 120000 lần mỗi giây cho 60 fps của XNA. Ngay cả việc tăng tối thiểu cuộc gọi đơn lẻ cũng có thể gây ra tác động tốc độ rất lớn. Tuy nhiên, tôi đơn giản không biết làm thế nào tôi có thể làm này hiệu quả hơn
private void DoColorCalcs(float factor, Color color)
{
int mul = (int)Math.Max(Math.Min(factor * 255.0, 255.0), 0.0);
tile.Color = new Color(
(byte)Math.Min(tile.Color.R + (color.R * mul/255), 255),
(byte)Math.Min(tile.Color.G + (color.G * mul/255), 255),
(byte)Math.Min(tile.Color.B + (color.B * mul/255), 255));
}
EDIT: Theo đề nghị của Michael Stum:
private void DoColorCalcs(float factor, Color color)
{
factor= (float)Math.Max(factor, 0.0);
tile.Color = new Color(
(byte)Math.Min(tile.Color.R + (color.R * factor), 255),
(byte)Math.Min(tile.Color.G + (color.G * factor), 255),
(byte)Math.Min(tile.Color.B + (color.B * factor), 255));
}
này giảm thời gian sử dụng từ 4% xuống còn 2,5%
Từ bạn đang tìm kiếm tối ưu hóa, không tối ưu hóa. :) – jalf
Có vẻ như rất nhiều cuộc gọi cho một trò chơi 2D đơn giản. Thay vào đó, bạn không thể thay đổi thuật toán tổng thể? Ví dụ: lưu trữ kết quả hoặc tránh làm mọi thứ trên mọi khung hình? – Jan
Tôi cần phải tính toán lại đèn năng động cho gạch (mô hình ánh sáng của tôi bao gồm ánh sáng nhấp nháy, thay đổi cường độ ánh sáng theo tỷ lệ Sin (thời gian) * 0,1 cho từng ô trong mỗi khung hình) – PiotrK