2011-03-04 57 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