2016-08-23 13 views
-1

Как я могу исправить actioncript без постоянной перестройки sfw? Существует довольно большой проект actionscript, который мне нужно изменить, и полученный swf используется на реальном сайте. Проблема заключается в том, что мне нужно сделать быстрые небольшие обновления для swf, и это неприемлемо обновлять swf на живом сайте десять раз в день (я не контролирую эту часть, мне нужно попросить другого человека поставить результат на живом сайте). Какие у меня варианты для решения этой проблемы? Я полный noob, когда дело доходит до actionscript и всех связанных с флеш-файлами, и я даже не уверен, что возможно, а что нет. Я думаю о следующих подходах, какие из них возможны/приемлемы?patching actionscript без постоянной перестройки swf

Предположите, что данный сайт размещен на www.livesite.com/game.html и эта страница загружается www.livesite.com/flashgame.swf. В этом flashgame.swf среди многих других есть класс com/livesite/Magic.as, который получает экземпляр, и экземпляр этого класса имеет переменную-член xxx123 класса com/livesite/MagicWork.as. Мне нужно только изменить этот класс MagicWork. Теперь я просто изменяю его, строю и прошу поставить обновленный flashgame.swf вживую. Поэтому я хочу избежать этого ручного шага.

Все мои идеи могут быть разделены на два основных подхода: 1) сохранить полностью немодифицированный flashgame.swf, а затем загрузить flashgame.mod.swf, который содержит альтернативную реализацию этого класса MagicWork, а затем использовать внутренние функции javascript экземпляра этого Magic класса и обновить его член xxx123, чтобы быть экземпляром класса MagicWork от flashgame.mode.swf. Мне нужно было бы изменить game.html, чтобы загрузить мой javascript, чтобы мой js-файл загрузил flashgame.mod.swf и код исправления внутри flashgame.swf. При исправлении я имею в виду javascript-стиль перезаписи Magic.xxx123 на новое значение. flashgame.mode.swf будет идеально проживать на моем собственном хосте, которым я управляю. Возможно ли, что это возможно, если это невозможно? 2) Я мог бы сделать одноразовое изменение в flashgame.swf, чтобы оно эффективно загрузило мой собственный код во время выполнения и заплатило его члену xxx123. Это возможно?

+0

Зачем вам много раз переиздавать на живую производственную площадку ?! – Brian

+0

@Brian Мне не нужно, но если мне когда-либо понадобится, я не буду спрашивать 10 раз вручную. Я работаю над проектом на ранней стадии, который частично направлен на то, как он работает на реальном сайте. Таким образом, если есть какие-либо проблемы, это может быть исправлено быстро и обновлено сразу. Дело в том, что он включен для пользователей 0.001%, например, поэтому он не будет влиять на все ppl, и это нормально делать ошибки там. – Pavel

+0

Хорошо, тогда решение вашей проблемы - получить прямой доступ к «0.001% живому сайту», чтобы вы могли обновить swf - не изменять код для загрузки зависимой swf с pavelscustomworld.org. – Brian

ответ

2

Я уже написал записку о загрузке ранее исполняемых разделяемых библиотек. Я поставлю здесь наиболее важные части процесса и добавлю ссылку на полную статью в конце.

Необходимо пометить основную точку входа приложения следующим образом.

[Frame(factoryClass="Preloader")] 
public class Main extends Sprite 
{ 

} 

Затем создайте класс под названием Preloader.

public class Preloader 
{ 

    public function Preloader() 
    { 
     var loader:Loader = new Loader(); 
     loader.contentLoaderInfo.addEventListener(Event.COMPLETE, this.loader_completeHandler); 
     loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, this.loader_ioErrorHandler); 
     var request:URLRequest = new URLRequest("math.swf"); 
     var context:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain); 
     loader.load(request, context); 
    } 

    private function loader_completeHandler(event:Event):void 
    { 
     var mainClass:Class = getDefinitionByName("Main") as Class; 
     var mainInstance:Main = new mainClass(); 
     this.addChild(mainInstance); 
    } 
} 

Полная реализация Основного класса такова.

[Frame(factoryClass="Preloader")] 
public function Main() 
{ 
    var integer:IntegerArithmetic = new IntegerArithmetic(); // Type declared in math.swf 
    var operand1:int = 10; 
    var operand2:int = 10; 
    var result:int = integer.add(operand1, operand2); 
} 

Развертывание среды выполнения общих библиотек

Запутанной немного об использовании среды выполнения совместно используемая библиотека, реализующая что SWF должен быть извлечен из SWC во время развертывания приложения. Это было не сразу очевидно, и я закончил тем, что проводил дни, размещая скомпилированный SWC-файл в разных местах и ​​задаваясь вопросом, почему приложение не смогло загрузить его во время выполнения. Неясная статья на веб-сайте Adobe сделала этот конкретный шаг и установила все прямо.

Полная статья вместе с тем же примером доступна по адресу http://www.notadesigner.com/runtime-shared-libraries-with-plain-actionscript/.