![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Aug 2007
Сообщений: 54
|
Здравствуйте я совсем что то запутался. До этого считал что после применения маски, размеры контейнера имеют размеры маски. Но тут после добавления контента превышающего размеры контейнера. Контейнер имеет размеры равные контенту. Второе путание связано с StageScaleMode.NO_SCALE, до этого считал что достаточно указать в конструкторе главного класса stage.scaleMode = StageScaleMode.NO_SCALE и все контейнеры будут иметь неизменяемые размеры. Все представлено в коде:
package { import flash.display.Shape; import flash.display.Sprite; import flash.display.StageScaleMode; import flash.events.Event; import flash.geom.Rectangle; public class TestMask extends Sprite { //private private var __container:Sprite; private var __mask:Shape; private var __child:Shape; private var __container2:Sprite; private var innerContainer:Sprite; private var __child2:Shape; private var __clipRect:Rectangle; public function TestMask() { init(); } //initialization private function init():void { // stage.scaleMode = StageScaleMode.NO_SCALE; createContainer(); createMask(); createChild(); makeHierarchy(); } private function makeHierarchy():void { __container.addChild( __child ); __container.addChild( __mask ); __container.mask = __mask; addChild( __container ); __clipRect = new Rectangle( 0, 0, 50, 50 ); innerContainer = new Sprite(); innerContainer.scrollRect = __clipRect; innerContainer.addChild( __child2 ); // innerContainer.height = 50; __container2.addChild( innerContainer ); addChild( __container2 ); } //private methods private function createContainer():void { __container = new Sprite(); __container.addEventListener( Event.ADDED_TO_STAGE, addedChildListener ); __container2 = new Sprite(); __container2.addEventListener( Event.ADDED_TO_STAGE, addedChildListener2 ); __container2.x = 150; } private function createMask():void { __mask = new Shape(); __mask.graphics.lineStyle( 0, 0x000000, 0 ); __mask.graphics.beginFill( 0x000000, 1 ); __mask.graphics.drawRect( 0, 0, 50, 50 ); __mask.graphics.endFill(); } private function createChild():void { __child = new Shape(); __child.graphics.lineStyle( 0, 0xcccccc, 0 ); __child.graphics.beginFill( 0xcccccc, 1 ); __child.graphics.drawRect( 0, 0, 100, 100 ); __child.graphics.endFill(); __child2 = new Shape(); __child2.graphics.lineStyle( 0, 0xcccccc, 0 ); __child2.graphics.beginFill( 0xcccccc, 1 ); __child2.graphics.drawRect( 0, 0, 100, 100 ); __child2.graphics.endFill(); } //events private function addedChildListener( e:Event ):void{ graphics.lineStyle( 1, 0xff0000, 1 ); graphics.drawRect( 0, 0, __container.width, __container.height ); graphics.endFill(); } private function addedChildListener2( e:Event ):void{ __container2.stage.scaleMode = StageScaleMode.NO_SCALE; innerContainer.height = 50; graphics.lineStyle( 1, 0xff0000, 1 ); graphics.drawRect( __container2.x, __container2.y, __container2.width, __container2.height ); graphics.endFill(); } } } |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Это нормально. Чтобы размеры контейнера всегда возвращались равными размеру маски, нужно просто переопределить геттеры width и height в этом контейнере, и возвращать размеры маски
например так. п.с. Советую никогда не использовать двойное подчеркивание перед названиями свойств. Лучше уж одно |
|
|||||
|
Регистрация: Aug 2007
Сообщений: 54
|
Все равно не помогает. Родительский контейнер опять как то по своему все высчитывает если маскированный контейнер поместить еще в один контейнер ,т.е. высчитывает реальные размеры того что находится в маске. Хотя trace высоты возвращает размеры маски для маскируемого контейнера. Я переопределил height в контейнере.
от этого ничего не изменилось. Родительский контейнер этого контейнера все равно возвращает реальное значение маскируемого контейнера с контентом внтури этого контейнера. Последний раз редактировалось Mideon; 14.08.2011 в 22:41. |
|
|||||
|
Регистрация: Aug 2007
Сообщений: 54
|
Мда какая то противоречивая статья. Здесь http://karoshiethos.com/2008/10/22/a...ght-getbounds/ наоборот не могут вычислить размеры внутреннего контента.
Добавлено через 22 минуты Печалька http://www.moock.org/blog/archives/000292.html |
|
|||||
|
Регистрация: Aug 2007
Сообщений: 54
|
scrollRect и юзаю, только нюансы такие же как и с маской. Т.е. баг расчета размеров очевиден, особенно когда контейнер с содержимым вставляется в другой (родительский ) контейнер и этому (родительскому) контейнеру задается фон . Сейчас сижу перекрываю height() и width() геттеры для мною созданного списка классов.
|
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
На форумах по джаве, даже за одно подчеркивание загрызут
![]() |
|
|||||
|
Регистрация: Aug 2007
Сообщений: 54
|
Хорошо, не могли бы вы предоставить хороший рабочий пример, того что это у вас работает. Мой пример представлен выше в виде приатаченного файла.
Добавлено через 4 минуты Эта привычка от AS2( потому что там есть такие свойства как _x, _y, _width, _height ) и Caringorm Framework'a. Но это тема отдельного разговора. Хотя интересно неужели в Java private поля пишутся без _ так же не интересно разделять в коде private от public. Т.е. по подчеркиванию в коде можно сразу понять что она private а не искать ее в объявлениях. |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:23. |
|
|
« Предыдущая тема | Следующая тема » |
|
|