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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 21.03.2008, 14:53
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 34  
Iv
 
Аватар для Iv

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
По умолчанию Рефакторим extractCommands

Вернемся к методу extractCommands.
Он всё еще великоват по размеру и его логика теряется во множестве условных операторов. К тому же метод содержит логически обособленные блоки, которые проще воспринимать отдельными методами.
Для начала попробуем вынести блок if (hasFill).
В строке, следующей за if (hasFill) добавим:
Код AS3:
fill = getFill();
C помощью CTRL+1 создадим метод и скопируем в него содержимое блока if до else. Закомментируем скопированный участок кода и из буфера обмена вставляем код в созданный метод.
Далее по очереди проходим по подсвеченым ошибкам и решаем что делать.
startColor - объявим локально.
node - объявим аргументом функции и передадим node в вызове.
thisColor - объявим локально.
Далее заменим присвоение переменной fill значения на return. Заодно удалим участки else, поскольку они оказываются ненужными. В итоге получаем такой метод:
Код AS3:
private function getFill(node:XMLNode) : Fill {
	// parse for fill color specification
	// if a hex number is specified, startColor will be > 0
	// if a color name is specified, startColor will be 0
	var startColor:Number = getAttribute(node, "fill").indexOf("#") + 1;
	if (startColor == 0) {   
		// name specified instead of color number
		var thisColor:Number = colors[getAttribute(node, "fill")];
		// if (thisColor == undefined) {
		if (isNaN(thisColor)) {
			return new Fill(0, 0);  // set invisible if undefined
		}
		return new Fill(thisColor, 100);
	}
	return new Fill(parseInt(getAttribute(node, "fill").substr(startColor, 6), 16), 100);
}
Тестируем. Работает.

Сносим закомментированный код и этот участок кода превращается во вполне удобоваримый:
Код AS3:
if (hasFill) {
	fill = getFill(node);
} else {
	fill = new Fill(0xffffff, 100);
}
__________________
http://realaxy.com


Последний раз редактировалось iNils; 20.12.2010 в 13:35.
Создать новую тему   Часовой пояс GMT +4, время: 00:39.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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