Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   кастомное изменение размеров дочерних элементов Sprite (http://www.flasher.ru/forum/showthread.php?t=193318)

KokoZzz 25.01.2013 16:35

кастомное изменение размеров дочерних элементов Sprite
 
у меня имеется порядка 4 вложенных спрайтов. изменение размеров по средствам width || height происходит у корневого. могу ли я как то предотвратить изменение scaleX && scaleY у дочерних элементов?

Код AS3:

stage.scaleMode = StageScaleMode.NO_SCALE;

не помогло

Tails 25.01.2013 16:38

Конкретно изменение Scale дочерних элементов не меняется. Визуально они деформируются, потому что на них применяется матрица трансформаций корневого спрайта.

KokoZzz 25.01.2013 16:40

есть ли способ изменить родительский объект, не влияя на дочерние?

strangedk 25.01.2013 16:50

Думаю, можно наследоваться от Sprite, и переопределить scaleX/scaleY или width/height

Но вообще это плохая практика, полагаю. Если трансформация не должна влиять на детей, тогда это не должны быть дети, пусть будут в отдельном контейнере, и все дела.

KokoZzz 25.01.2013 17:10

они должны лежать в этом контейнере, но высоту и ширину мне надо задавать самостоятельно.
можете мне подсказать, как переопределить свойство width?

Код AS3:

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, то у ребенка они не изменятся вообще! Просто родительская матрица искажения будет наложена на весь контейнер. Можно только компенсировать
Код AS3:

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

Цитата:

Сообщение от strangedk (Сообщение 1117766)
ойойой какой костыль

всё равно печаль :)

KokoZzz 25.01.2013 17:21

спасибо. буду читать мануалы.

expl 25.01.2013 18:08

Цитата:

у меня имеется порядка 4 вложенных спрайтов. изменение размеров по средствам width || height происходит у корневого. могу ли я как то предотвратить изменение scaleX && scaleY у дочерних элементов?
- у корневого изменяются размеры
- у дочерних не должны
Зачем тогда изменять у корневого? В нём что-то кроме дочерних есть? В нем что-то нарисовано?
Тогда берём это нарисованное, ложим в корневой и меняем размеры нарисованного, а корневой не трогаем.

Нужно чтобы размеры нарисованного менялись автоматом при изменении width и height корневого?
Тогда просто перегружаем width и height корневого, _не трогая_ нативные width и height корневого:
Код AS3:

private var _width:Number = 100;
override public get width():Number { return _width; }
override public set width(value:Number):void {
    _width = value;
    _spriteWithDrawings.width = value;
}



Часовой пояс GMT +4, время: 11:08.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.