PDA

Просмотр полной версии : Рисование - оптимизация?


ins_nsk
31.07.2007, 18:05
Суть проблемы в следующем - с помощью своего AS-класса по функции onEnterFrame осуществляется прорисовка "капельки стекающей по стеклу", и соответственно оставляющей мокрый след - после того как она стекает достаточно далеко, в остальных мувиках начинаются тормоза.

Пример ролика тут (http://stepiko.ru/rain/rain.html).

Примерно так:

class Drop extends MovieClip
{
var X, Y;
function Drop()
{
// блаблабла инициализая, скипед
drawDrop();
onEnterFrame = moveDrop;
}


function moveDrop()
{
// с помощью алгоритма вычислить следующую координату X и Y для прорисовки кружочка, а потом
drawDrop();

// если утекла вниз, то clear(); X=random, y=0;
}

function drawDrop()
{
with(this)
{
beginFill(0x333333,100);
moveTo(x+r, y);
curveTo(r+x, Math.tan(Math.PI/8)*r+y, Math.sin(Math.PI/4)*r+x, Math.sin(Math.PI/4)*r+y);
curveTo(Math.tan(Math.PI/8)*r+x, r+y, x, r+y);
curveTo(-Math.tan(Math.PI/8)*r+x, r+y, -Math.sin(Math.PI/4)*r+x, Math.sin(Math.PI/4)*r+y);
curveTo(-r+x, Math.tan(Math.PI/8)*r+y, -r+x, y);
curveTo(-r+x, -Math.tan(Math.PI/8)*r+y, -Math.sin(Math.PI/4)*r+x, -Math.sin(Math.PI/4)*r+y);
curveTo(-Math.tan(Math.PI/8)*r+x, -r+y, x, -r+y);
curveTo(Math.tan(Math.PI/8)*r+x, -r+y, Math.sin(Math.PI/4)*r+x, -Math.sin(Math.PI/4)*r+y);
curveTo(r+x, -Math.tan(Math.PI/8)*r+y, r+x, y);


endFill();

}
}
}


всё чудесно, капелька вполне реалистично ползёт вниз. Но когда проходит большое количество прорисовок остальные мувики заметно тормозят (например, навигация). Неужели отрисованный след (по сути - куча прорисованных кружочков) занимает так много памяти? Ведь когда он сбрасывается по clear() - торможение исчезает.

Нельзя ли каким-то образом прооптимизировать отрисованный след после добавления к нему очередной позиции чтоб не было такого?

(не пинайте новичка :D если туплю))

etc
31.07.2007, 19:18
Не смог разглядеть, ибо размер флешки, как у счетчика.

Такие вещи с помощью BitmapData реализуются.