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

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

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

Регистрация: Jan 2012
Сообщений: 26
По умолчанию Как правильно отловить ИСКЛЮЧЕНИЕ переполнения статического ВЕКТОРА?

Есть статический вектор на 300 элементов, нужно перестраховаться на случай его переполнения.

Код AS3:
                 /**
 		 * Searches target display object and its  linear algorithm for symbol named (oname).
		 * if ignoreDependancy is true, it will ignore IndependedDisplay property on symbols and will go deeper
		 * 
		 * @param owner The main container
		 * @param name The name of the object
		 * @param ignoreIndependency The flag which includes verification of the existence of properties IndependedDisplay
		 * @return  The first matching object in the tree with the given name
		 * 
		 */		
		public static function getChildByNameDeep( owner: DisplayObjectContainer, name: String, ignoreIndependency:Boolean = false ): DisplayObject 
		{
			trace("Вход");
			var first:MovieClip = new MovieClip();
			first.name = 'null';
			first.addChild(owner);
 
			if( owner == null ) return null;//Проверяем основной контейнер на пустоту
 
			var stackIdx:Vector.<uint> = new Vector.<uint>(300, true);
 
			var lastElVec:uint = 0;//указатель на последний элемент вектора 
 
			var currContainer:DisplayObject  = owner; 
 
			var curChildIndex:int = 0;//счетчик углубленности в контейнере 
 
			trace("curr=", currContainer.name );
			do 
			{ 
				// Имитация захода внутрь
 
				if( currContainer is DisplayObjectContainer )
				{
					trace( "currContainer is DisplayObjectContainer, curChildIndex="+curChildIndex );
 
					if( !ignoreIndependency && currContainer.hasOwnProperty( "IndependedDisplay")&& currContainer["IndependedDisplay"] == true )
					{
 
					}
					else if( curChildIndex < (currContainer as DisplayObjectContainer).numChildren ) 
					{
						trace( "curChildIndex="+curChildIndex+"Углубленность="+(currContainer as DisplayObjectContainer).numChildren);
						lastElVec++;//перетаскиваем указатель Вправо
						stackIdx[lastElVec] = curChildIndex; 
						trace("размер массива",stackIdx);
						currContainer = ( currContainer as DisplayObjectContainer ).getChildAt( curChildIndex );
 
						curChildIndex = 0;
						trace( "идем внутрь", currContainer.name );
 
						continue;
					}
				}
				// проверка на доститжение результата
				trace( "проверка на доститжение результата" );
				if( currContainer.name == name ) return currContainer;
 
				// Идем наверх
 
				// выше некуда
				if( lastElVec > stackIdx.length-1 )
					return null;
 
				// выше есть куда
				trace("выше есть куда до:",curChildIndex);
 
				curChildIndex = stackIdx[lastElVec]; 
				lastElVec--;
				curChildIndex++;
 
				trace("выше есть куда после:",curChildIndex);
				currContainer = currContainer.parent;//возвращаемся к родителю
 
				// Если мы поднялись до уровня вызова
			} while ( currContainer != first ); 
 
			return null;	
		}//getChildByNameDeep[/left]

Старый 02.02.2012, 15:17
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 2  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
ммм. а как он может переполнится если у него установлено макс- колво 300 элементов?
__________________
Марк Tween

Старый 02.02.2012, 15:18
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 3  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
try-catch
__________________
тут я

Старый 02.02.2012, 15:22
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 4  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Если правильно понял суть вопроса, то два варианта
1:
Код AS3:
trace(lastElVec >= stackIdx.length);
2:
Код AS3:
try {
    stackIdx[lastElVec] = 0;
} catch (error:RangeError) {
    trace(error);
}
Первый предпочтительнее.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.


Последний раз редактировалось dimarik; 02.02.2012 в 15:24.
Создать новую тему Ответ Часовой пояс GMT +4, время: 10:30.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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