Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 14.08.2011, 21:54
Mideon вне форума Посмотреть профиль Отправить личное сообщение для Mideon Найти все сообщения от Mideon
  № 1  
Ответить с цитированием
Mideon

Регистрация: Aug 2007
Сообщений: 54
По умолчанию Размеры контейнера после применения маски

Здравствуйте я совсем что то запутался. До этого считал что после применения маски, размеры контейнера имеют размеры маски. Но тут после добавления контента превышающего размеры контейнера. Контейнер имеет размеры равные контенту. Второе путание связано с StageScaleMode.NO_SCALE, до этого считал что достаточно указать в конструкторе главного класса stage.scaleMode = StageScaleMode.NO_SCALE и все контейнеры будут иметь неизменяемые размеры. Все представлено в коде:
Код AS3:
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();
		}
	}
}
на данный момент если раскоментить строку stage.scaleMode = с и изменить размеры контейнера, контейнер изменит размер а контент в нем деформируется. Если же не ставить stage.scaleMode = StageScaleMode.NO_SCALE; а добавить __container2.stage.scaleMode = StageScaleMode.NO_SCALE; в обработчик события addedChildListener2() контейнер примет размеры маски. Кто может объяснить в чем дело? Или есть какая информация по данным вопросам. Буду очень благодарен.

Создать новую тему   Часовой пояс GMT +4, время: 02:54.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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