Маски и пляски

2 views
Skip to first unread message

Андрей Скорик

unread,
Aug 26, 2010, 9:57:45 AM8/26/10
to ruF...@googlegroups.com
Господа.. :) что-то я страшно удивлен..
почему размеры маскированного объекта равны его исходным размерам?
и как вообще тогда скроппить объект?

Т.е. Есть у меня клип 300*300 есть маска 150*150

размеры клипа остаются быть 300*300 вне зависимости от того применена ли маска..
а мне надо делать лейаут.. и как-то неудобно работать обращаясь к
размерам маски.. Как быть?

Перезаписать width/height не предлагать - не работает.. точнее
работает.. но как только это вкладываешь в другой спрайт - оно его
растягивает до истинных размеров.

--
С уважением, Скорик Андрей. andrew...@gmail.com

Ivan Dembicki

unread,
Aug 26, 2010, 10:03:00 AM8/26/10
to ruf...@googlegroups.com
Hello Андрей,

> Перезаписать width/height не предлагать - не работает.. точнее
> работает.. но как только это вкладываешь в другой спрайт - оно его
> растягивает до истинных размеров.

- всё работает. Если переписать get/set для width и height, то всё ок.
Я не помню, но может быть еще и scaleX и scaleY потрогать придется.

--
iv
http://www.bezier.ru
http://bezier.googlecode.com

kutu

unread,
Aug 26, 2010, 10:03:43 AM8/26/10
to ruf...@googlegroups.com
scrollRect

Андрей Скорик

unread,
Aug 26, 2010, 10:10:17 AM8/26/10
to ruf...@googlegroups.com
> - всё работает. Если переписать get/set для width и height, то всё ок.
> Я не помню, но может быть еще и scaleX и scaleY потрогать придется.

//page -целевой элемент большого размера..

/* PageBase - перезаписаны методы-установщики ширины и высоты

{
if (this.mask)
{
return this.mask.width;
}
else
{
return super.width;
}
}

public override function set width(new_width:Number):void
{
if (this.mask)
{
var beginMaskWidth:Number = mask.width;
var beginThisWidth:Number = this.width;

this.mask.width = new_width;

//Scale this just as many percent as you scaled the mask
super.width = (this.mask.width / beginMaskWidth) * beginThisWidth;
}
else
{
super.width = new_width;
}
}

*/

.............

var cont:Sprite = new Sprite ();
var mask:Sprite = new Sprite ();
var gr:Graphics = mask.graphics;

gr.beginFill(0xff0000, 1);
gr.drawRect(0,0, 100, 100);
gr.endFill();

var wrapper:PageBase = new PageBase ();

cont.addChild(mask);
cont.addChild(wrapper);

wrapper.addChild(page);
wrapper.mask = mask;

trace ('mask size: '+mask.width +' x '+ mask.height);
trace ('wrapper size: '+wrapper.width +' x '+ wrapper.height);
trace ('cont size: '+cont.width +' x '+ cont.height);
.........................

// output

mask size: 100 x 100
wrapper size: 100 x 100
cont size: 290 x 10251

вуаля...

Андрей Скорик

unread,
Aug 26, 2010, 10:15:32 AM8/26/10
to ruf...@googlegroups.com
мне то собсно надо чтоб и у cont - у того куда все это добро пихается
- размеры были равными видимым размерам контента.. а не тому что
замаскировано..

Ivan Dembicki

unread,
Aug 26, 2010, 10:33:07 AM8/26/10
to ruf...@googlegroups.com
Hello Андрей,

> мне то собсно надо чтоб и у cont - у того куда все это добро пихается
> - размеры были равными видимым размерам контента.. а не тому что
> замаскировано..

- значит им всем нужно менять get/set методы для ширины и высоты.

Андрей Скорик

unread,
Aug 26, 2010, 10:42:06 AM8/26/10
to ruf...@googlegroups.com
> - значит им всем нужно менять get/set методы для ширины и высоты.

и так до стейджа? :)

как-то это совсем уныло.. я думал есть трюк..

Сергей Мирин

unread,
Aug 27, 2010, 6:17:14 AM8/27/10
to ruf...@googlegroups.com
Как было сказано выше, никаких трюков не надо - просто используй scrollRect (я так понял, в твоём случае маска имеет прямоугольную форму)
scrollRect меняет возвращаемую "замаскированным" объектом ширину и высоту и не придётся переопределять геттеры-сеттеры у всего, во что объект вкладывается

Андрей Скорик

unread,
Aug 27, 2010, 6:34:02 AM8/27/10
to ruf...@googlegroups.com
если бы он что-то менял - я бы тут не спрашивал ничего)) а вам бы
рекомендовал проверять - прежде чем кому-то что-то советовать

trace (mc.width)
trace (mc.height)
mc.scrollRect = new Rectangle (0,0,20,20);
trace (mc.width)
trace (mc.height)

лично у меня выводит (визуальные размеры объекта изменяются) следующее:

250
250

250
250

Valentin Simonov

unread,
Aug 27, 2010, 7:18:23 AM8/27/10
to ruf...@googlegroups.com
var mc:Sprite = new Sprite();
mc.graphics.beginFill(0);
mc.graphics.drawRect(0, 0, 100, 100);
mc.graphics.endFill();

super.addChild(mc);

a();

mc.scrollRect = new Rectangle(0,0,20,20);

a();

super.addEventListener(Event.ENTER_FRAME, a);

function a(e:Event = null):void {
trace(mc.width);
trace(mc.height);
trace(mc.getBounds(mc));
}


Yuriy Kulkoff

unread,
Aug 27, 2010, 7:21:52 AM8/27/10
to ruf...@googlegroups.com
> лично у меня выводит (визуальные размеры объекта изменяются) следующее:
 scrollRect применяется и удаляется не моментально вроде, попробуй проверить результаты переждав кадр

 
--
отменить подписку: ruFlash-u...@googlegroups.com
сообщение в группу: ruF...@googlegroups.com
страница группы: http://groups.google.com/group/ruFlash
правила группы: http://groups.google.com/group/ruFlash/web/rules

Андрей Скорик

unread,
Aug 27, 2010, 7:21:37 AM8/27/10
to ruf...@googlegroups.com
во - вот это уже интереснее :) спасибо. закрадывалась такая мысль - но
была изгнана почему-то.

Андрей Скорик

unread,
Aug 27, 2010, 7:25:17 AM8/27/10
to ruf...@googlegroups.com
Спасибо все откликнувшимся - я верил и верю в силу коллективного
разума :) Остается проверить еще примениться ли он без добавки в
дисплей лист.
Хотя все это очередной quirk плейера на мой взгляд.

Андрей Скорик

unread,
Aug 27, 2010, 7:26:15 AM8/27/10
to ruf...@googlegroups.com
> проверить еще примениться ли он без добавки в
> дисплей лист.

Проверил - не применяется пока не добавлен в дисплей.

Reply all
Reply to author
Forward
0 new messages