У меня проблемы с некоторым кодом AS3, который просто рисует объект Sprite
Graphics
. Рисование происходит как часть более крупной процедуры, вызываемой для каждого ENTER_FRAME
события stage
.
Flash не вылетает и не возвращает ошибку. Вместо этого он начинает работать на 100% ЦП и захватывает всю память, которая может, до тех пор, пока я не завершу процесс вручную, или мой компьютер не прогнется под давлением, когда он достигает примерно 2-3 ГБ. Это произойдет в произвольное время и без какого-либо непредвиденного замедления.
WTF? Кто-нибудь видел что-нибудь подобное?
PS: Раньше я рисовал в обработчике событий MOUSE_MOVE
, что еще больше ускорило эту проблему.
PPS: я занимаюсь разработкой для Linux, но воспроизвел ту же проблему в Windows.
ОБНОВЛЕНИЕ : Вы попросили некоторый код, так что мы здесь. Функция рисования выглядит следующим образом:
public static function drawDashedLine(i_graphics : Graphics, i_from : Point, i_to : Point, i_on : Number, i_off : Number) : void
{
const vecLength : Number = Point.distance(i_from, i_to);
i_graphics.moveTo(i_from.x, i_from.y);
var dist : Number = 0;
var lineIsOn : Boolean = true;
while(dist < vecLength)
{
dist = Math.min(vecLength, dist + (lineIsOn ? i_on : i_off));
const p : Point = Point.interpolate(i_from, i_to, 1 - dist / vecLength);
if(lineIsOn) i_graphics.lineTo(p.x, p.y);
else i_graphics.moveTo(p.x, p.y);
lineIsOn = !lineIsOn;
}
}
и называется так (m_graphicsLayer
является Sprite
):
m_graphicsLayer.graphics.clear();
if (m_destinationPoint)
{
m_graphicsLayer.graphics.lineStyle(2, m_fixedAim ? 0xff0000 : 0x333333, 1);
drawDashedLine(m_graphicsLayer.graphics, m_initialPos, m_destinationPoint, 10, 10);
}