На этой странице https://spiritshare.org/circles.html, Я использую несколько простой код для рендеринга некоторых кругов, движущихся по гравитационной сетке.Сетка впечатляется цветом кругов, когда они движутся вдоль нее, и веса затем рисуются на экране.Но что-то пожирает всю вселенную и сворачивает его в верхний левый угол, как обратный большой взрыв!
Я думаю, что это может быть сборщик мусора или, возможно, математическая ошибка где-то в моем коде?(Вся математика прямо на первой странице, внизу).Вот соответствующая часть, где цвета смешиваются вместе с кружком.
p = (y * fullW + x) * 3;
d = Math.sqrt(xd + yd);// * 0.5; //Math.sqrt( xd + yd );
// console.log(p);
//console.log( c.r, c.g, c.b );
if( cfg.safe_colors == true ) {
if( typeof cfg.max_color == 'undefined' ) cfg.max_color = 255;
gravity[p + 0] = (gravity[p + 0] * cfg.color_fade + cfg.color_speed * d * c.r) & cfg.max_color;
gravity[p + 1] = (gravity[p + 1] * cfg.color_fade + cfg.color_speed * d * c.g) & cfg.max_color;
gravity[p + 2] = (gravity[p + 2] * cfg.color_fade + cfg.color_speed * d * c.b) & cfg.max_color;
} else if( typeof cfg.max_color != 'undefined' ) {
gravity[p + 0] = (gravity[p + 0] * cfg.color_fade + cfg.color_speed * d * c.r);
gravity[p + 1] = (gravity[p + 1] * cfg.color_fade + cfg.color_speed * d * c.g);
gravity[p + 2] = (gravity[p + 2] * cfg.color_fade + cfg.color_speed * d * c.b);
if( gravity[p] > cfg.max_color ) gravity[p] = cfg.max_color;
if( gravity[p+1] > cfg.max_color ) gravity[p+1] = cfg.max_color;
if( gravity[p+2] > cfg.max_color ) gravity[p+2] = cfg.max_color;
} else {
gravity[p + 0] = (gravity[p + 0] * cfg.color_fade + cfg.color_speed * d * c.r);
gravity[p + 1] = (gravity[p + 1] * cfg.color_fade + cfg.color_speed * d * c.g);
gravity[p + 2] = (gravity[p + 2] * cfg.color_fade + cfg.color_speed * d * c.b);
}
Кажется, все работает нормально, но через некоторое время, возможно, когда некоторые дроби начинают накапливаться или когда получена ошибкашанса где-то потерять, экран быстро начинает накапливать черные пиксели один за другим.
Это не должно делать это ... Я обновил его, и он делает это реже с более жестким управлением процессором,но все еще дает сбой, когда цвета становятся слишком плотными, а размытие (удерживайте заглавную букву B для увеличения размытия, предупреждая, что он жует процессор) становится слишком высоким.