पर रंग मैनिपुलेशन अनुकूलित करें मैं अपना सरल 2 डी एक्सएनए गेम प्रोफाइल कर रहा हूं। मैंने पाया कि पूरे चलने वाले समय का 4% दो रंगों को एक साथ जोड़ने के सरल ऑपरेशन द्वारा लिया जाता है, उनमें से एक फ्लोट द्वारा पहले गुणा किया जाता है।एक्सएनए
मुझे इस विधि को प्रति फ्रेम 2000 बार (मानचित्र पर प्रत्येक टाइल के लिए) कॉल करने की आवश्यकता है, जिसने मुझे XNA के 60 एफपीएस के लिए प्रति सेकंड 120000 बार दिया। यहां तक कि एकल कॉल की न्यूनतम वृद्धि भी भारी गति प्रभाव देगी। अभी तक मैं सरल पता नहीं कैसे मैं इस और अधिक प्रभावी
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));
}
संपादित कर सकते हैं: माइकल 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));
}
यह 2.5%
जो शब्द आप खोज रहे हैं वह अनुकूलित है, अनुकूल नहीं है। :) – jalf
यह एक साधारण 2 डी गेम के लिए बहुत सी कॉल की तरह लगता है। क्या आप इसके बजाय समग्र एल्गोरिदम नहीं बदल सकते? उदा। परिणाम कैशिंग या हर फ्रेम सब कुछ करने से परहेज? – Jan
मुझे टाइल्स के लिए गतिशील रोशनी को पुन: गणना करने की आवश्यकता है (मेरे प्रकाश मॉडल में हल्की झिलमिलाहट शामिल है, जो हर फ्रेम में दिए गए टाइल के लिए पाप (समय) * 0.1 पर प्रकाश तीव्रता को बदलती है) – PiotrK