2016-08-23 9 views
-1

sfw를 지속적으로 재구성하지 않고도 actionscript를 패치 할 수 있습니까? 수정해야 할 상당히 큰 actionscript 프로젝트가 있으며 결과로 나오는 SWF가 라이브 사이트에서 사용됩니다. 내가 가진 문제는 swf에 대한 작은 업데이트를 빠르게 만들어야하고 라이브 사이트에서 swf를 하루에 10 번 업데이트 할 수 없다는 것입니다. (그 부분을 제어하지 않아 다른 사람에게 결과를 요청할 필요가 있습니다. 라이브 사이트에서). 해당 문제를 해결하려면 어떤 옵션을 사용해야합니까? 나는 액션 스크립트와 모든 플래시 관련 자료에 관해서는 완전한 멍청한 놈이다. 나는 무엇이 가능하고 그렇지 않은지조차 확신하지 못한다. 나는 다음과 같은 접근법에 대해 생각하고 있는데, 어떤 것들은 가능 ​​/ 수용 가능한가?swf를 지속적으로 재구성하지 않고 actionscript를 패치하십시오.

라이브 사이트가 www.livesite.com/game.html이고이 페이지가 www.livesite.com/flashgame.swf이라고 가정 해 보겠습니다. 많은 다른 사람들 사이에 flashgame.swf에는 인스턴스화 된 클래스 com/livesite/Magic.as이 있으며이 클래스의 인스턴스에는 com/livesite/MagicWork.as의 구성원 변수 xxx123이 있습니다. 이 MagicWork 클래스 만 수정하면됩니다. 이제는 간단히 수정하고 업데이트하여 flashgame.swf을 빌드하도록 요청합니다. 따라서 수동 단계를 피하고 싶습니다.

모든 아이디어는 두 가지 기본 접근 방식으로 나눌 수 있습니다. 1) flashgame.swf를 완전히 수정하지 않은 상태에서 MagicWork 클래스의 대체 구현을 포함하는 flashgame.mod.swf를로드 한 다음 해당 자바 인스턴스의 자바 스크립트 액세스 내부 구조를 사용합니다. xxx123 멤버를 클래스의 인스턴스가되도록 flashgame.mode.swf에서 업데이트합니다. game.html을 수정하여 js 파일이 flashgame.mod.swf이고 패치 코드가 flashgame.swf이되도록 내 자바 스크립트를로드해야합니다. 패치를하면 자바 스크립트 스타일의 Magic.xxx123을 새로운 값으로 덮어 쓰는 것을 의미합니다. flashgame.mode.swf은 제가 제어하는 ​​자체 호스트에 이상적으로 존재합니다. 가능한 일이 아닌가요? 2) flashgame.swf에서 일회성 변경을하면 런타임시 자신의 코드를 효과적으로로드하고 xxx123 멤버의 패치를 적용 할 수 있습니다. 그게 가능하니?

+0

왜 라이브 프로덕션 사이트에 여러 번 게시해야합니까?! – Brian

+0

@Brian 나는 필요가 없다. 그러나 내가해야만한다면 나는 수동으로 10 번을 묻고 싶지 않다. 저는 초기 단계 프로젝트에서 일하고 있습니다. 부분적으로는 라이브 사이트에서 어떻게 작동하는지에 관한 것입니다. 따라서 문제가있을 경우 즉시 수정하여 즉시 업데이트 할 수 있습니다. 요점은 예를 들어 0.001 % 사용자가 사용할 수 있기 때문에 모든 PPL에 영향을 미치지 않으므로 실수하지 않는 것이 좋습니다. – Pavel

+0

자, 문제의 해결책은 "0.001 % 라이브 사이트"에 직접 액세스하여 swf를 업데이트 할 수 있도록하는 것입니다. pavelscustomworld.org에서 종속성 swf를로드하도록 코드를 변경하지 마십시오. – 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); 
    } 
} 

Main 클래스의 전체 구현은 다음과 같습니다.

[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/입니다.