Количество частиц, испускаемых в кадре, можно рассчитать по формуле:
double n = delta_time * frequency
int i = (int)n;
f = n - i;
В основном вы можете испускать i
частиц.
Дробная часть f
может быть накоплена для более поздних кадров. Когда он накапливает больше единицы, вы можете испускать целое число частиц:
f_sum += f;
if (f_sum > 1.0) {
int j = (int)f_sum;
f_sum -= j;
i += j;
}
Однако, следующее интересное решение для дробного числа частицы.
Используя генератор псевдослучайных чисел (PRNG), мы можем использовать его, чтобы определить, должна ли испускаться частица:
if (f >= r()) // Assumes r() is a PRNG generating a random value in [0, 1)
i++;
Этот подход полезен, когда частота изменяется относительно времени. И это устраняет необходимость хранения дополнительной переменной.
Другая прелесть этого подхода в том, что система частиц будет выглядеть менее однородной. Например, если частота равна 1,5, а время дельты равно 1, при использовании первого подхода кадры будут излучать последовательность из 1, 2, 1, 2, ... частиц. Второй подход может сломать эту модель.
Кроме того, вы можете использовать modf()
для извлечения целой и дробной части числа с плавающей запятой.