Просмотр полной версии : кастомное изменение размеров дочерних элементов Sprite
у меня имеется порядка 4 вложенных спрайтов. изменение размеров по средствам width || height происходит у корневого. могу ли я как то предотвратить изменение scaleX && scaleY у дочерних элементов?
stage.scaleMode = StageScaleMode.NO_SCALE;
не помогло
Конкретно изменение Scale дочерних элементов не меняется. Визуально они деформируются, потому что на них применяется матрица трансформаций корневого спрайта.
есть ли способ изменить родительский объект, не влияя на дочерние?
strangedk
25.01.2013, 16:50
Думаю, можно наследоваться от Sprite, и переопределить scaleX/scaleY или width/height
Но вообще это плохая практика, полагаю. Если трансформация не должна влиять на детей, тогда это не должны быть дети, пусть будут в отдельном контейнере, и все дела.
они должны лежать в этом контейнере, но высоту и ширину мне надо задавать самостоятельно.
можете мне подсказать, как переопределить свойство width?
override public function set width(value:Number):void{
//каким образом мне задать ширину компонента, не передавая свойство детям?
super.width = value;
}
strangedk
25.01.2013, 17:12
наоборот, переопределять нужно у детей. без вызова super
но повоторюсь, это ойойой какой костыль
iflamberg
25.01.2013, 17:17
каким образом мне задать ширину компонента, не передавая свойство детям?
Да никак, как вы не поймете. Дело в том, что если у спрайта-родителя вы измените width или scaleX, то у ребенка они не изменятся вообще! Просто родительская матрица искажения будет наложена на весь контейнер. Можно только компенсировать
override public function set width(value:Number):void{
var k:Number = super.width/value;
child.width *= k; //компенсируем ребенку изменение ширины родителя
super.width = value;
}
strangedk
25.01.2013, 17:20
ойойой какой костыль
всё равно печаль :)
спасибо. буду читать мануалы.
у меня имеется порядка 4 вложенных спрайтов. изменение размеров по средствам width || height происходит у корневого. могу ли я как то предотвратить изменение scaleX && scaleY у дочерних элементов?
- у корневого изменяются размеры
- у дочерних не должны
Зачем тогда изменять у корневого? В нём что-то кроме дочерних есть? В нем что-то нарисовано?
Тогда берём это нарисованное, ложим в корневой и меняем размеры нарисованного, а корневой не трогаем.
Нужно чтобы размеры нарисованного менялись автоматом при изменении width и height корневого?
Тогда просто перегружаем width и height корневого, _не трогая_ нативные width и height корневого:
private var _width:Number = 100;
override public get width():Number { return _width; }
override public set width(value:Number):void {
_width = value;
_spriteWithDrawings.width = value;
}
Думаю, можно наследоваться от Sprite, и переопределить scaleX/scaleY или width/height
Но вообще это плохая практика, полагаю. Если трансформация не должна влиять на детей, тогда это не должны быть дети, пусть будут в отдельном контейнере, и все дела.
А вот я не согласен. В том, что-бы переопределить width или height нет ничего плохого. Просто объект будет сам себя перерисовывать как надо, а не масштабироваться.
Например простейшая кнопка с закруглёнными краями и текстовым полем внутри.
strangedk
25.01.2013, 21:03
А потом вам вдруг нужно главному контейнеру сделать scaleX = scaleY = 0.5, и тадаааам, перепиши еще десяток классов.
В этом случае резонно было бы положить не поддающиеся масштабированию компоненты в отдельный контейнер, и именно в нем уже запретить масштабирование. Чтобы потом при случае можно было его регулировать без вмешательства в сами компоненты.
всем спасибо, разбил компоненты на разные слои =)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.