Вопрос старый, но так как он совпадает с тем, над чем я работал, я решил, что соберу что-то вместе, если другие найдут это полезным. Решение работает только для AS3. Это позволяет вам изменять значения переменных и констант экземпляра.
Предположим, у вас есть следующий класс:
package pl.krakow.rynek {
import flash.display.Sprite;
public class Advertisement extends Sprite {
private var title:String = 'Euro 2012 LIVE!';
/* ... */
}
}
Вы хотите, чтобы переменная title была чем-то другим. Код для этого следующий:
<?php
require_once 'flaczki/classes.php';
// parse the SWF file, decoding only those tags needed by the injector
$input = fopen("input.swf", "rb");
$parser = new SWFParser;
$injector = new AS3ConstantInjector;
$swfFile = $parser->parse($input, $injector->getRequiredTags());
$classConstants = array(
'pl.krakow.rynek.Advertisement' => array(
'title' => 'Free Beer!'
)
);
// inject the values and reassemble the file
$injector->inject($swfFile, $classConstants);
$output = fopen($outPath, "wb");
$assembler = new SWFAssembler;
$assembler->assemble("output.swf", $swfFile);
?>
Код должен быть понятен. SWF-файл сначала анализируется, вносятся изменения, а структура в памяти сохраняется в файл. AS3ConstantInjector.inject () ожидает в качестве второго аргумента массив массивов с ключевыми именами классов, которые вы хотите изменить. Сами массивы содержат новые значения для каждого класса с ключом в качестве имени переменной / константы.
Чтобы увидеть переменные в SWF-файле, используйте AS3ConstantExtractor:
<?php
require_once 'flaczki/classes.php';
$input = fopen("button.swf", "rb");
$parser = new SWFParser;
$extractor = new AS3ConstantExtractor;
$swfFile = $parser->parse($input, $extractor->getRequiredTags());
$classConstants = $extractor->extract($swfFile);
print_r($classConstants);
?>
Классы Flaczki можно скачать по адресу http://code.google.com/p/flaczki/downloads/list
Подробнее о фреймворке Flaczki вы можете узнать в блоге по разработке проекта по адресу http://flaczkojad.blogspot.com/