Интересный проект, мне нравится моделирование частиц / молекул. Самый очевидный вопрос в первую очередь; Почему бы вам просто не установить переменную в начальное значение?
Кажется, это проблема логики c. Путь / поток в вашем коде может быть лучше.
Если вы не установите переменную 'f', это 'undefined'. В настройках вы добавляете молекулы воды и воздуха. Но в конструкторе класса молекулы есть следующее:
this.f = f;
this.speed_x = random(-f,f);
this.speed_y = random(-f,f);
Каким будет случайный (-неопределенный, неопределенный)? Это число не существует.
С текущим кодом вы можете добавлять молекулы, только когда установлена глобальная переменная 'f', что кажется плохой практикой. Вы можете добавить молекулы после установки переменной 'f', использовать начальное значение или обновить эти значения в молекуле после изменения переменной 'f'.
Кроме того, изменения в переменной 'f' никогда не бывают передавая существующие молекулы, вы изменяете только глобальную переменную 'f'.
Другая вещь; Нет необходимости проверять скорость каждого кадра. Только когда значение в выпадающем списке изменяется. Вместо вызова скорости в функции рисования, добавьте это к функции настройки:
var temp = document.getElementById("molshake");
temp.addEventListener('change', speed);
Это добавляет слушателя к событию 'onchange', и когда изменяется dropbox, он вызывает speed ();