2011-03-04 54 views
0

背景:AS3庫不兼容

我寫一個Flash遊戲,並遇到了問題。 我一直在使用Polygonal的AS3數據結構(http://code.google.com/p/polygonal/wiki/DataStructures),沒有任何問題。

我最近添加了對遊戲(http://www.smartfoxserver.com/)的SmartFoxServer 2X支持。只要我導入SmartFox SWC文件,就會在「新的LinkedQueue()」調用中發現運行時錯誤,指出不兼容的覆蓋。

無論如何,我提出了一個多邊形的錯誤,事實證明,SmartFox使用他的數據結構的舊版本,並將其包含在他們的SWC文件中。

我的問題:

考慮到我的全部是二SWC文件,有一些方法可以讓我在他們的強迫不同的命名空間?這將允許我與smartfox的舊版本一起使用新版本。

回答

1

是的,如果它真的很重要,並且您想花時間,可以通過更改swf和目錄中的swc來修改軟件包。

下面是使用SWFWire Decompiler樣本AIR項目:

public class SWFWireCompiler extends Sprite 
{ 
    public function SWCEditor() 
    { 
     stage.nativeWindow.activate(); 

     var bytes:ByteArray = getBytes('library.swf'); 

     var swfReader:SWFReader = new SWF10Reader(); 
     var readResult:SWFReadResult = swfReader.read(new SWFByteArray(bytes)); 
     readResult.swf.header.signature = SWFHeader.UNCOMPRESSED_SIGNATURE; 

     for each(var tag:SWFTag in readResult.swf.tags) 
     { 
      var abcTag:DoABCTag = tag as DoABCTag; 
      if(abcTag) 
      { 
       for each(var string:StringToken in abcTag.abcFile.cpool.strings) 
       { 
        if(string.utf8 == 'de.polygonal.ds') 
        { 
         string.utf8 = 'de.polygonal.ds.old'; 
        } 
       } 
      } 
     } 

     var swfWriter:SWFWriter = new SWF10Writer(); 
     var writeResult:SWFWriteResult = swfWriter.write(readResult.swf); 

     writeBytes('C:\\output.swf', writeResult.bytes); 
    } 

    private function getBytes(file:String):ByteArray 
    { 
     var bytes:ByteArray = new ByteArray(); 
     var stream:FileStream = new FileStream(); 
     stream.open(File.applicationDirectory.resolvePath(file), FileMode.READ); 
     stream.readBytes(bytes); 
     stream.close(); 
     return bytes; 
    } 

    private function writeBytes(filename:String, bytes:ByteArray):void 
    { 
     var file:File = new File(filename); 
     var fs:FileStream = new FileStream(); 
     fs.open(file, FileMode.WRITE); 
     fs.writeBytes(bytes); 
     fs.close(); 
    } 
} 

那麼你將不得不做一個查找/替換的catalog.xml,然後重新包裝。

+0

我會看到smartfox和polygonal的人想出了什麼。目前,我已經通過將舊版本加載到頂端來實現工作。 – 2011-03-06 04:57:24

+0

我應該把你的標記作爲接受的答案嗎?我的意思是它本身並不是一個解決方案,但我不希望任何人迴應。 – 2011-03-10 11:32:20

+0

@Aaron我加了一些代碼,如果你這樣做,所以現在它應該是你的問題的實際答案。 – 2011-03-11 07:56:16