76. [warning] Меняем размер пустого Sprite

junior – серия статей для начинающих ActionScript-разработчиков.
Все статьи серии:
http://flashpress.ru/blog/category/junior/
Warning – Стоп! Будьте внимательны, впереди аварийно опасный код.
Посмотреть все статьи серии: http://flashpress.ru/blog/category/warning/

Представьте себе ситуацию, когда у вас в коде появился пустой объект класса Sprite, или любого другого унаследованного от Sprite. Под пустым я понимаю в graphics-е этого спрайта ничего не нарисовано, и внутри нет ни каких других визуальных объектов, или они тоже пустые. Другими словами пустой – это значит что его свойства width и height равны 0. Так вот если вы такому объекту зададите любое значение width или height, то этот спрайт будет не видимым даже после того как вы что либо нарисуете в нем , как показано в примере:

FlashBuilderFlashIDE
Код для редактора Adobe FlashBuilder
Код для редактора Adobe Flash CS Professional

В момент выполнения флешки мы ничего не увидим, и в методе trace мы увидим значения 0 0, не смотря на то, что в graphics-е мы нарисовали красный квадрат размером 100×100. Даже если вы попытаетесь добавить в этот sprite другой не пустой спрайт – вы все равно ничего не увидите:

FlashBuilderFlashIDE
Код для редактора Adobe FlashBuilder
Код для редактора Adobe Flash CS Professional

Это происходит потому что когда вы присваиваете DisplayObject-у значение .width и .height, FlashPlayer изменяет свойства .scaleX и .scaleY по формуле newValue/oldValue. Т.е. если у вас изначально был пустой объект, то у него значение .width равно 0, если вы присвоите ему значение 100, вы получите объект у которого значение .scaleX равно 0. И после того как вы в нем что то нарисовали(или добавили в него непустой объект) вы все равно имеете объект со значением .scaleX=0, т.к. это свойство не зависит от внутренностей визуального объекта. Что бы вернуть объект в нормальный вид, достаточно задать ему в свойствах .scaleX и .scaleY значения по умолчанию 1:

FlashBuilderFlashIDE
Код для редактора Adobe FlashBuilder
Код для редактора Adobe Flash CS Professional

В этом коде, в первом trace-е мы получим значения “0 0″, а во втором: “150 150″, и объект отобразится на сцене.

Помните, баги не дремлют!
Serious Sam
Эту статью прочитали 1188 раз

Возникли вопросы по статье? Не стесняйтесь спрашивать в комментариях или любым другим способом на странице Контакты .

Присоединяйтесь к нам в социальных сетях: ВКонтакте , Twitter и Facebook
Понравилась статья? Буду благодарен если вы поделитесь ссылкой с друзьями:


Комментарии ВКонтакте:




Комментарии Facebook:




Комментарии WordPress:


  1. WeslomPo

    ScaleX, ScaleY – будут равны 0 из-за деления на нуль. Если поменять их то все вернется на круги своя.