- 1
- 2
float alpha = float(m_startAlpha) + 255.0f * (getElapsed() / (m_duration * (1.0f - float(m_startAlpha) / 255.0f)));
m_target->setAlpha(static_cast<uint8_t>(alpha));
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+160
float alpha = float(m_startAlpha) + 255.0f * (getElapsed() / (m_duration * (1.0f - float(m_startAlpha) / 255.0f)));
m_target->setAlpha(static_cast<uint8_t>(alpha));
Выдержка из обновления объекта-действия, производящего линейный фейд-аут объекта...
Общение с чужим говнокодом не проходит бесследно... что же я курил, перед тем как ЭТО соорудить?
Существуют исключения из этого принципа, не по коду выше трудно сказать, оно это или нет.
1) Такая точность, которую даёт float, нам нигде нафиг не нужна. Даже при отсчёте времени (таких FPS, чтобы это стало критичным, наверно, ни одна нетекстовая игра не даст).
2) DirectX по умолчанию весьма интересно ведёт себя с double, сводя любую возможную пользу от его использования к нулю.
http://chrisvall.com/coding/directx-trouble-with-double-values-rounding-offnot-returning-a-proper-precision-value-after-initializing-directx
Да, и с чего бы это вычислениям вестись в double, если я напишу что-нибудь типа (5.0f * 0.5f)?