Actionscript 3 AS3库不兼容
背景: 我正在写一个flash游戏,遇到了一个问题。 我一直在使用Polygol的AS3数据结构(),没有任何问题 我最近在游戏中添加了SmartFoxServer 2X支持()。导入SmartFox SWC文件后,我会在“new LinkedQueue()”调用中收到运行时错误,这表明覆盖不兼容 无论如何,我在Polygol上提交了一个bug,结果表明SmartFox使用的是他的数据结构的旧版本,并将其包含在他们的SWC文件中 我的问题:Actionscript 3 AS3库不兼容,actionscript-3,namespaces,swc,smartfoxserver,Actionscript 3,Namespaces,Swc,Smartfoxserver,背景: 我正在写一个flash游戏,遇到了一个问题。 我一直在使用Polygol的AS3数据结构(),没有任何问题 我最近在游戏中添加了SmartFoxServer 2X支持()。导入SmartFox SWC文件后,我会在“new LinkedQueue()”调用中收到运行时错误,这表明覆盖不兼容 无论如何,我在Polygol上提交了一个bug,结果表明SmartFox使用的是他的数据结构的旧版本,并将其包含在他们的SWC文件中 我的问题: 考虑到我只有两个SWC文件,有没有什么方法可以强制将其
考虑到我只有两个SWC文件,有没有什么方法可以强制将其中的一个文件放到另一个名称空间中?这将允许我在使用smartfox旧版本的同时使用新版本。是的,如果它真的很重要,并且您想花时间,可以通过更改swf和内部目录来修改swc中的包 下面是一个示例空气项目,使用:
然后,您必须在catalog.xml中进行查找/替换,然后重新打包。我来看看smartfox和Polygol的同事们有什么想法。目前,我已经通过在顶部加载旧版本来完成工作。我是否应该将您的答案标记为已接受的答案?我的意思是,这本身并不是一个解决方案,但我不希望其他任何人做出回应。@Aaron我添加了一些代码,以防您这样做,所以现在它应该是您问题的实际答案。
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();
}
}