извлечение SWF дает ошибки компилятора в Adobe Flash CS4 - PullRequest
0 голосов
/ 24 апреля 2010

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

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

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

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

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

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

Спасибо!

1 Ответ

3 голосов
/ 24 апреля 2010

Я не уверен, что понимаю вашу проблему, но, похоже, вам нужно изменить URL, переданный методу load.Также кажется, что ваш 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.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".

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

...