Порядок портирования классов определяестя следующим образом: вначале портируем классы, которые не требуют других классов проекта.
Затем переходим к тем классам, которые используют только портированные классы.
Внутри классов действуем по этой же схеме: вначале портируем те функции, которые не используют других пользовательских функций, и затем переходим к функциям, которые используют уже портированные.
Следуя этой логике, портирование классов начнем с 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.
Компилируем еще раз и убеждатемся в том, что компилятор не выдает ошибок.
Если это так, то можем переходить к следующей части.