|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Feb 2008
Сообщений: 890
|
Словил жестокий баг с DisplayObject.scrollRect
import flash.display.Sprite; import flash.geom.Rectangle; import flash.events.MouseEvent; import flash.events.Event; var s:Sprite = new Sprite(); s.graphics.beginFill(0x123456); s.graphics.drawRect(0, 0, 100, 100); addChild(s); var rect:Rectangle = new Rectangle(0, 0, 50, 50); stage.addEventListener(MouseEvent.CLICK, handler_click); function handler_click(event:Event = null):void { s.scrollRect = rect; trace('handler_click:', s.width, s.height); //stage.addEventListener(Event.ENTER_FRAME, handler_enterFrame); } function handler_enterFrame(event:Event):void { trace('handler_enterFrame:', s.width, s.height); } Цитата:
Цитата:
__________________
скриптограф |
|
|||||
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Пичалька. Напиши адобу багрепорт...
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Не раз сталкивался с подобными "багами", и, насколько понял своим недопрограммистским умом, тут имеет место последовательность обработки событий в течении "кадра". То есть события интерактивные, мыши и клавиатуры, обрабатываются первыми, а вовсе не ENTER_FRAME. Таким образом, когда Вы совершили клик, его обработчик выполнится ДО того, как будет продиспатчено событие ENTER_FRAME для текущего "кадра". В этом обработчике Вы делаете подписку на ENTER_FRAME, и в результате получаете первое событие в этом же кадре, еще ДО его перерисовки.
У меня совсем недавно была такая же проблема совсем не со scrollRect, а с кошерным и вроде бы безбажным addChild)) При клике на некую кнопочку должен был сохраняться скриншот: делался снимок стейджа в битмапдату, конвертация в PNG и сохранение через файлРеференс. Конвертация заметно притормаживала в фуллскрине, и я решил повесить модальное окошко, затемнение и надпись "обрабатываем..." Естественно, вызов конвертации я "перенес на другой кадр" через ентерфрейм. То есть окошко добавлялось на стейдж, и после этого вешался слушатель на ентерфрейм, в обработчике которого запускался процесс конвертации. Но не тут-то было - окошко появлялось на стейдже только после окончания конвертации, "в следующем кадре". Мистика? Баг? Отнюдь. Потому что событие ENTER_FRAME наступало еще в течении этого же кадра, сразу после выполнения обработчика клика, но ДО начала отрисовки. Таким образом и обработчик этого ентерфрейма начинал выполняться в этом же кадре – то есть запускалась конвертация в PNG, и только потом следовала отрисовка.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Любопытства ради, может быть поможет EXIT_FRAME?
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
Регистрация: Feb 2008
Сообщений: 890
|
Основная проблема-то не в том, что в этом или не в этом кадре, а в том, что не сразу.
__________________
скриптограф |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Feb 2008
Сообщений: 890
|
Тут какая проблема возникает:
У меня есть некая утилитная ф-ия выравнивания, которая принимает в себя объект и какие-то параметры для выравнивания. Получается, что эта ф-ия выдает не тот результат, что ожидается, если объекту, который мы в нее передаем, в этом же кадре (даже не в стеке ф-ий, а вообще в кадре) был назначен скроллРект. Т.е. эта же самая ф-ия с этими же самыми входными данными выдаст совершенно иной результат в следующем кадре. Передавать в нее помимо объекта еще и истинные размеры объекта (или ожидаемые) - глупость, т.к. она сразу перестанет быть утилитной, удобной и внятной. Остается одно - пользоваться старыми добрыми масками, в таком виде скроллРект слишком опасен.
__________________
скриптограф |
|
|||||
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Норм?
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
Регистрация: Feb 2008
Сообщений: 890
|
На счет кадров Wolsh все правильно написал - не спорю.
Добавлено через 6 минут Цитата:
__________________
скриптограф |
Часовой пояс GMT +4, время: 19:34. |
|
« Предыдущая тема | Следующая тема » |
|
|