Показать сообщение отдельно
Старый 10.03.2008, 20:20
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 6  
Iv
 
Аватар для Iv

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

Порядок портирования классов определяестя следующим образом: вначале портируем классы, которые не требуют других классов проекта.

Затем переходим к тем классам, которые используют только портированные классы.
Внутри классов действуем по этой же схеме: вначале портируем те функции, которые не используют других пользовательских функций, и затем переходим к функциям, которые используют уже портированные.

Следуя этой логике, портирование классов начнем с Math2.
Для этого откроем созданный нами пустой класс Math2, и рядом AS2 версию этого класса.
Скопируем содержимое AS2 класса кроме первой и последней строки и вставим в тело AS3 класса.

Оценим степень разрухи: всё не так уж и страшно. Явных ошибок FDT не нашел, только подсветил отсутствие или неверную типизацию.

На этом этапе мы не будем приводить этот код в порядок, поскольку наши изменения могут повлиять на другие классы.
Проделаем аналогичную операцию с остальными классами в папке svg.
Класс String2, а его мы портируем вторым, также не доставил никаких хлопот.
В классе PathToArray потребовалось только импортировать XMLNode:
import flash.xml.XMLNode;

Тестирование.
На данном этапе мы не можем качественно протестировать соответствие кода стандартам AS3. Но минимальный тест всё-таки сделать необходимо.

Поскольку класс PathToArray использует и Math2 и String2, то нам для теста достаточно создать экземляр такого класса для того, чтобы компилятор Flash сказал свое веское слово.

Для того, чтобы создать экземпляр класса PathToArray нам потребуется посмотреть с какими параметрами он вызывается.
С этой целью найдем исходный ZIP файл, распакуем его в папочку на рабочем столе, откроем класс PathToArray и добавим трейсы:
Код AS3:
public function PathToArray(svgNode:XMLNode, dCmds:Array) {
	trace(svgNode)
	trace("-----------")
	trace(dCmds)
	trace("=====================")
	..................
Компилим AS2 проект, видим, что первый параметр - узел XMLNode (копируем один из них, что покороче), а второй параметр может быть пуст (это запомним).

Теперь можем добавить тест. В классе SVGDisplayInFlash добавим метод testPathToArray:
Код AS3:
private function testPathToArray():void {
	const path:String = "<path fill='#ED1C24' d='M261.5,52.3c11.9,3.2-5.2,21,32.9,31.6C288.5,35.5,261.5,52.3,261.5,52.3z' />";
	const foo:XMLDocument = new XMLDocument(path);
	new PathToArray(foo.firstChild, []);
}
и добавим его вызов в методе initInstance.

Результатом компиляции станет ругань компилятора. При ближайшем рассмотрении видим, что нет ничего страшного: дважды он ругается на то, что Number не может быть undefined и несколько раз на дублирование объявления переменных. Это несложно исправить.
В соответствующих местах заменяем проверку на равенство undefined на функцию isNaN:
Код AS3:
// if (thisColor == undefined) {
if (isNaN(thisColor)) {
И удаляем лишние var в дублирующихся объявлениях переменных в классах SVGDisplayInFlash и Math2.
Компилируем еще раз и убеждатемся в том, что компилятор не выдает ошибок.
Если это так, то можем переходить к следующей части.
__________________
http://realaxy.com


Последний раз редактировалось iNils; 20.12.2010 в 13:17.