MovieClip изменяет размеры, но его высота и ширина у детей не меняются? - PullRequest
6 голосов
/ 27 февраля 2011

Изменение ширины и высоты родительского MovieClip не приводит к изменению ширины и высоты внутреннего MovieClip.Родительский MovieClip помещается в рабочую область и изменяется вручную.Когда я назначаю измерение родительского MovieClip внутреннему MovieClip через код, родительское измерение MovieClip изменяется.Я хочу, чтобы оба MovieClip были одинаковой ширины и высоты во время выполнения.Тем не менее, размер родительского MovieClip изменен мной во время разработки.

Пример:

Есть два MovieClip, один внутри другого.Теперь родительский MovieClip помещается в рабочую область во время разработки, и его размер равен (50,50), а дочерний MovieClip, который находится внутри родительского MovieClip, также имеет такие же размеры (50,50).Теперь я вручную изменяю размер родительского MovieClip, нажимая Q и растягивая его с помощью мыши, размер родительского MovieClip теперь равен (100,150) или как угодно.Теперь дважды щелкните родительский MovieClip и убедитесь, что внутреннее измерение MovieClip остается прежним, т.е. (50,50)
Теперь в коде AS3 я изменяю ширину и высоту внутреннего MovieClip следующим образом:

saveheight = parentmc.height;
savewidth  = parentmc.width;

Теперь я изменяю дочерний MovieClip в соответствии с размерами родительского MovieClip следующим образом:

parentmc.inner_mc.width = parentmc.width;
parentmc.inner_mc.height = parentmc.height;

, но это также приводит к изменению parentmc, поэтому я переназначаю значение на parentmc следующим образом:

parentmc.height = saveheight;
parentmc.width = savewidth;

В вышеприведенном случае размеры parentmc и inne_rmc должны быть одинаковыми, т. Е. (100, 150).Поменяв значения, как указано выше, я получаю parentmc и inner_mc одинакового размера, но размер объекта никогда не будет (100, 150), я проверил это с помощью приложения для создания идеальных пикселей.

Ответы [ 3 ]

3 голосов
/ 07 апреля 2011

В своем коде вы не учитываете преобразование в родительский объект, которое вы сделали с помощью инструмента 'Q' в среде разработки. Ширина и высота childmc выражаются в преобразованном координатном пространстве parentmc. Если вы хотите масштабировать внутренний клип до определенного размера в координатном пространстве сцены , вам необходимо учитывать масштаб родительского элемента, который получился в результате преобразования:

   parentmc.inner_mc.width = parentmc.width/parentmc.scaleX;
   parentmc.inner_mc.height= parentmc.height/parentmc.scaleY;

Кроме того, если клипы не выровнены (например, зарегистрированы по их левому верхнему углу и с дочерним элементом в 0,0), увеличение дочернего элемента может расширить границы родительского элемента.

Вы также можете использовать родительскую матрицу преобразования, если вы предпочитаете использовать шкалу X и ScaleY.

ОБНОВЛЕНИЕ 4.8.11: Возможно, вы просили сделать это (удаление преобразования во время выполнения)?

saveheight = parentmc.height;
savewidth  = parentmc.width;

parentmc.scaleX = 1.0;  // Undo authoring-time scale transform
parentmc.scaleY = 1.0;  // Undo authoring-time scale transform

parentmc.inner_mc.width = savewidth;
parentmc.inner_mc.height = saveheight;

parentmc.width = savewidth;
parentmc.height = saveheight;

Примечание. Я не на компьютере, на котором установлен Flash для проверки этого, поэтому, пожалуйста, оставьте мне комментарий, если это не соответствует вашим ожиданиям, и я с радостью проверим свою работу и проследим за ней.

0 голосов
/ 06 апреля 2011

Честно говоря, я не понимаю, о чем вы спрашиваете, потому что то, что вы описываете, должно работать!

Если у нас есть parentMC и childMC с 50 высотой и 50 шириной, если вы измените parentMC.scaleX = 2;по всей видимости, будет 100 в ширину.То же самое касается childMC.

Не могли бы вы привести пример того, что вы пытаетесь сделать здесь?- или какой-то код.

0 голосов
/ 28 февраля 2011

это не совсем так работает,

вам нужно умножить дочерние элементы на шкалу родителя.

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

...