Flash / Flex: проблема «Предупреждение: фильтр не будет отображаться» - PullRequest
2 голосов
/ 03 июня 2010

В моем гибком приложении у меня есть собственное окно TitleWindow, которое всплывает в модальном режиме.Когда я изменяю размер окна браузера, я получаю это предупреждение:

Предупреждение: фильтр не будет отображаться.Отфильтрованные размеры объекта DisplayObject (1286, 107374879) слишком велики для рисования.

Очевидно, у меня ничего не установлено с высотой 107374879.

После этого всякий раз, когда я наводю курсор мыши на что-либо вFlash Player (v. 10), процессор использует 100%.Когда я закрываю TitleWindow, проблема исчезает.К сожалению, предупреждение не указывает, какой объект DisplayObject слишком велик для рисования.Я попытался прикрепить явную высоту / ширину к TitleWindow и компонентам внутри него, но все равно не повезло.

[Edit]

График утолщается: я обнаружил, что проблема возникает только тогда, когда яустановите модальный параметр createPopUp в PopUpManager на «true».Я не вижу поведения, когда модал установлен на «ложь».Он не работает, когда применяется серый фильтр для других компонентов, которые являются модальными.Любые идеи, как я могу отследить один объект, который не был инициализирован, но фильтруется во время модальной фазы?

Спасибо за чтение.

Ответы [ 5 ]

3 голосов
/ 05 июня 2010

Это может быть не так в вашем приложении, но я сталкивался с подобными случаями, когда высота или ширина объекта была установлена ​​на какое-то необоснованно большое число в результате неправильного использования целого числа без знака в вычислениях для позиционирования, высота или ширина.

Схематический код для такого сценария может быть таким:

var offset:uint = 30;
var position:uint = txt.textHeight - offset;
divider.y = position;

Код ошибочно предполагает, что txt.textHeight всегда будет больше 30. Если это не так, txt.textHeight - offset будет отрицательным числом, которое при сохранении в uint вместо этого станет очень большим числом.

Скажем, например, что текст в формате txt, который предполагается длинным многострочным текстом, вместо этого представляет собой одну строку высотой 20 пикселей. Результат будет равен -10, а при сохранении в позиции uint var значение position будет 4294967286.

Вышеприведенный пример является дрянным кодом, но в реальной ситуации проблема uint может возникнуть более сложным способом, который может быть сложнее определить сразу. Я думаю, что редко бывает полезно использовать целое число без знака для таких вещей, как позиции x и y, которые могут иметь отрицательные значения.

3 голосов
/ 05 июня 2010

Вы можете написать некоторый код для рекурсивного понижения иерархии объектов DisplayObjectContainer и DisplayObject и проверки большой высоты.

Должно быть довольно просто написать. Функция, подобная этой, должна сделать свое дело:

function RecurseDisplayObjects(DisplayObject obj):void
{
    //check for height and do a trace() or whatever here

    if(obj is DisplayObjectContainer)
    {
        var container:DisplayObjectContainer = obj as DisplayObjectContainer;
        for(var i:int=0; i<container.numChildren; i++)
        {
            RecurseDisplayObjects(container.getChildAt(i);
        }
    }
}

Вы должны начать это с передачи объекта DisplayObject верхнего уровня в вашем приложении. (возможно, получено с помощью DisplayObject.root)

Другой вариант, который у вас есть, - это получить исходный код платформы Flex и изменить его, чтобы получить более значимую ошибку.

1 голос
/ 07 июня 2010

Проблема, вероятно, не в вашем TitleWindow, а в объектах под ним. Фильтр, который не может отрендерить, вероятно, вспышка фильтра размытия применяется ко всему ниже модального диалога. Если один из объектов на сцене слишком велик, чтобы применить к нему размытие в реальном времени, вы получите ошибку, о которой упоминали.

Я решил эту проблему, применив маску к объекту под окном заголовка, задав размер сцены. Это, вероятно, решит вашу проблему, но вы должны определенно выяснить, почему что-то достигает такого размера, не звучит здорово. : -)

0 голосов
/ 30 декабря 2010

У меня была похожая проблема, я отследил ее до альфа-фильтра, примененного к объекту, масштабированному до -0.23453422334 Как только я округлил шкалу до 2 значащих цифр, все заработало нормально. Трудная ошибка, чтобы отследить однако.

0 голосов
/ 05 июня 2010

К сожалению, я понятия не имею, но мы пытаемся найти похожую проблему в нашей. Может быть, это поможет?

http://www.mail-archive.com/flashcoders@chattyfig.figleaf.com/msg48091.html

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