извлечение SWF дает ошибки компилятора в Adobe Flash CS4

Мне дали SWF для редактирования ссылки в коде AS. Дело в том, что SWF использует некоторый XML, который генерируется (фактически извлекается) PHP-кодом из базы данных.

menuXML.load("/sub/page/dynamic.php?genre=" + genre); 

так что дело в том, что мы можем использовать один и тот же «мейнфрейм» SWF и заполнять их разными анимациями/источниками на основе ссылки, указанной в dynamic.php?genre=###

Теперь я использовал Flash Decompiler Gold для извлечения всех файлов в SWF и могу снова открыть его в Adobe Flash для редактирования. Когда это сделано, я нажимаю CTRL+ENTER, и тут же появляются 4 ошибки компилятора!! Ошибки: 1x ‹ Обнаружено неожиданное 'if' > 2x ‹ Блок операторов должен заканчиваться '}' > 1x ‹ Ожидалось имя поля после '.' оператор. >

Как эти ошибки могут присутствовать, когда оригинальный SWF работает отлично??!

Если мне не удастся решить эту проблему, мне придется выяснить, как создать файл .php, который пытается использовать SWF, который может выбрать правильные ресурсы (я думаю, из базы данных), чтобы показать их (используя ?genre= ###)

Спасибо!


person theDoctor    schedule 24.04.2010    source источник


Ответы (1)


Я не уверен, что понимаю вашу проблему, но, похоже, вам нужно изменить URL-адрес, переданный методу загрузки. Также кажется, что ваш swf - это Actionscript 2.0.

Декомпиляторы работают, но fla-файл, который вы можете сгенерировать с помощью декомпилятора, редко будет полезен для создания того же самого swf. Иногда код незаконен, и почти всегда графика хромает.

Однажды мне пришлось внести некоторые простые изменения в код (например, изменить несколько URL-адресов и другие простые вещи) в swf, для которого у нас не было исходников (они были потеряны, и не было резервной копии...).

Я использовал для этого flasm, и это сработало нормально (к тому же это было не так сложно, как я сначала предполагал).

Flasm - это не декомпилятор, а дизассемблер. Он берет ваш swf, анализирует байт-код actionscript и создает текстовый файл с кодом, подобным ассемблеру. Вы можете отредактировать этот код и повторно собрать swf. Он не затрагивает графику и анимацию, так что это было то, что мне нужно, и, возможно, сработает для вас.

Я сделал небольшой тест, и он работал нормально.

Я начал с этого кода во флае:

var xml:XML = new XML();
xml.ignoreWhite = true;
xml.onLoad = function(ok:Boolean):Void {
    if(ok) {
        _debug_txt.text = "ok";
        _debug_txt.text = xml;
    } else {
        _debug_txt.text = "error";
    }
};

xml.load("/sub/page/dynamic.php");

Затем я открыл приглашение cmd (у меня Windows), перейдите в каталог, содержащий swf, и запустите:

flasm -d test_flasm.swf > test_flasm.flm

Это дизассемблирует swf в текстовый файл test_flasm.flm. Я добавил flasm в путь к исполняемым файлам, но вместо этого вы можете просто использовать полный путь к flasm.exe.

Соответствующая часть файла .flm выглядит следующим образом:

setMember
push '/sub/page/dynamic.php', 1, 'xml'
getVariable
push 'load'
callMethod

Ваш может отличаться, но если вы ищете URL-адрес, вы его найдете. Затем изменил этот URL-адрес на:

setMember
push 'test.xml', 1, 'xml'
getVariable
push 'load'
callMethod

Затем я пересобрал swf, используя:

flasm -a test_flasm.flm

И теперь test_flasm.swf загружает "test.xml" вместо "/sub/page/dynamic.php".

Надеюсь это поможет.

person Juan Pablo Califano    schedule 24.04.2010