flash as3 Почему при изменении альфа-значения объекта увеличивается объем памяти? - PullRequest
0 голосов
/ 31 декабря 2011

для инструмента периодической таблицы, который я создаю, я включил эффект, который изменяет альфа-значение всякий раз, когда я наводю курсор на элемент (довольно стандартно).

Я заметил таинственный прирост памятикогда завис над моими элементами;использование SYSTEM.TOTAL_MEMORY - при наведении курсора на элемент будет увеличено использование памяти примерно на 0,005 МБ, которое не исчезает, когда я выключаю мышь.Однако, если я снова наведу курсор мыши, второго увеличения памяти не будет.

Закомментировав биты функции, я заметил, что причиной этого является альфа-изменение.код для этого:

addEventListener(MouseEvent.MOUSE_OVER,highlightthis);
addEventListener(MouseEvent.MOUSE_OUT,dehighlight);

function highlightthis(evt:MouseEvent):void
{
    if (evt.target is Element)
        evt.target.alpha = 0.5;

}

function dehighlight(evt:MouseEvent):void
{
    if (evt.target is Element)
        evt.target.alpha = 1;
}

Кто-нибудь знает, почему происходит это увеличение памяти при изменении значения альфа?И любопытно, почему это происходит только один раз?

Дополнительная информация: мой класс Element - это MovieClip, в котором есть пара TextFields, примитивные переменные и MovieClip.Свойству mouseChildren присвоено значение false (а свойству buttonMode установлено значение true).

1 Ответ

3 голосов
/ 31 декабря 2011

Это может быть выстрел в темноте, я не знаю причину, но могу попытаться угадать.Прозрачность требует знания цвета фона, кроме того, для отображения прозрачности вам понадобится еще один байт информации (в BitmapData) на пиксель (т. Е. Увеличение RGB -> ARGB на 33%).Итак, когда игрок знает сплошной цвет, он не утруждает себя сохранением невидимого фона, как только фон становится видимым, ему, естественно, требуется больше памяти для сохранения информации о цвете.Как только это происходит, он либо кэширует эту информацию, либо вы просто не дождались цикла GC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...