Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как маской обрезать DisplayObject (http://www.flasher.ru/forum/showthread.php?t=166053)

Dron1564 29.08.2011 15:15

Как маской обрезать DisplayObject
 
Имеется DisplayObject( неважно какой ) ... с размерами 600 на 600..
Делаю маску размером 300 на 300.. конечно отображается регион размером 300 на 300, но реальные размеры остаются( 600 на 600 ), а надо чтоб и отображалось и размер был 300 на 300...
Так же такое обрезание для FLV видио, чтоб можно было делать..

Код AS3:

import flash.display.Shape;
import flash.display.MovieClip;
 
var MS:MovieClip = new MovieClip();
 
var msk:Shape = new Shape();
msk.graphics.beginFill( 0xffffff );
msk.graphics.drawRect(0,0, 300, 300 );
MS.addChild( msk );
 
var cont:MovieClip = new MovieClip();
cont.graphics.beginFill( 0x000000 );
cont.graphics.drawRect(0,0, 600, 600 );
MS.addChild( cont );
cont.mask = msk;
 
addChild( MS );
 
trace( MS.width + " " + MS.height ); // Выводит "600  600", а надо получить "300 на 300"

Хелп народ.. плз ))

КорДум 29.08.2011 15:17

Переопределите геттеры width/height. То есть, берите размеры не объекта а маски.

Dron1564 29.08.2011 15:22

А если MS будет находится внутри другого MovieClip, то его размеры буду соответственно не меньше 600 на 600... т.е. тогда придется геттеры width/height для всех родителей менять, чтоб реальный( видимый) размер узнать?

DaFive 29.08.2011 15:24

Правильно КорДум молвит. Маска не обрезает клип (то есть не отсекает все лишнее), она лишь показывает его часть. То есть объект как был 600х600 так и останется. Меняется не его структура, а меняется его отображение на сцене.

КорДум 29.08.2011 15:27

Цитата:

т.е. тогда придется геттеры width/height для всех родителей менять, чтоб реальный( видимый) размер узнать?
Верно. Только зачем такая вложенность?
К слову, вместо маски можно использовать scrollRect.

Dron1564 29.08.2011 15:43

Ну, а как тогда получить 300 на 300, если не маской... ?
Только копированием через Bitmap и Matrix?

Цитата:

Код AS3:

trace( MS.width + " " + MS.height ); // Выводит "600  600", а надо получить "300 на 300"



КорДум 29.08.2011 16:10

Я же написал. scrollRect.

Mideon 29.08.2011 17:01

scrollRect возвратит так же 600 x 600

КорДум 29.08.2011 17:03

Неправда.
Код AS3:

obj.scrollRect = new Rectangle(0, 0, 300, 300);
trace(obj.scrollRect); // 0, 0, 300, 300


Mideon 29.08.2011 17:15

Код AS3:

var content:Shape = new Shape();
var g:Graphics = content.graphics;
g.beginFill( 0xFF0000, 1 );
g.drawRect( 0, 0, 600, 600 );
g.endFill();
 
obj.addChild( content );
 
obj.scrollRect = new Rectangle(0, 0, 300, 300);
trace(obj.scrollRect); // 0, 0, 300, 300
trace(obj.scrollRect.height); // 300
trace(obj.height); // 600

все равно если вызвать height объекта возвращает 600


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

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