Actionscript 3 AS3:如何补充现有库中的函数调用?

Actionscript 3 AS3:如何补充现有库中的函数调用?,actionscript-3,oop,Actionscript 3,Oop,我有一个半新手的问题。我已经编程好几年了,但我早期的所有经验都是面向对象编程之前的,我的大脑就是这样。我对Actionscript也是新手。所以,希望这对某些人来说是一件容易的事 我正在使用as3svgrenderlib导入SVG。它工作得很好,但我需要能够序列化它输出的图形。但是我不能序列化精灵,所以我必须一直到IGraphicsData级别才能得到我能得到的东西。但是图书馆没有给我这些数据。它只给我精灵。所以我需要改变这一点 由于它最终使用的绘图方法屈指可数(beginll,drawRect

我有一个半新手的问题。我已经编程好几年了,但我早期的所有经验都是面向对象编程之前的,我的大脑就是这样。我对Actionscript也是新手。所以,希望这对某些人来说是一件容易的事

我正在使用as3svgrenderlib导入SVG。它工作得很好,但我需要能够序列化它输出的图形。但是我不能序列化精灵,所以我必须一直到IGraphicsData级别才能得到我能得到的东西。但是图书馆没有给我这些数据。它只给我精灵。所以我需要改变这一点

由于它最终使用的绘图方法屈指可数(
beginll
drawRect
,等等),因此我的想法是,如果我能够连接到这些方法中,并用自己的代码补充它们,以输出IGraphicsData,那么我将投入业务。现在我知道我可以通过使用“扩展”类来实现这一点,但这需要对库进行大量修改,以将所有这些标准调用更改为我的自定义调用

所以我想知道:有没有一种神奇的OOP方式来编写方法,可以在不修改原始调用的情况下普遍拦截对现有方法的调用

谢谢!:)


编辑:我需要独立于分辨率,所以我必须将图形保持在矢量中,而不是将其转换为位图。

在OOP中无法执行此类操作,您需要重写类(但在您的情况下可能不可能),或者直接修改库

但是,在您的情况下,一个可能的解决方案是:

  • 使用库将SVG绘制到精灵
  • 将精灵绘制到位图数据中
  • 最后,使用
    getPixels()
    获取像素数据并将其序列化
  • 这样的事情应该行得通

    var sprite:Sprite = new Sprite();
    
    // Add the child to the stage...
    // Draw the SVG to the sprite...
    
    var bmpData:BitmapData = new BitmapData(spriteWidth, spriteHeight);
    bmpData.draw(sprite);
    
    var pixelData:ByteArray = bmpData.getPixels(new Rectangle(0, 0, bmpData.width, bmpData.height));
    
    // Here serialize the byte array
    

    在本例中,请注意spriteWidth/spriteHeight不一定是“sprite.width”和“sprite.height”(sprite通常报告的维度与您预期的不同)。因此,您需要预先确定渲染SVG的大小,并在构建
    位图数据时使用它。如果在OOP中无法执行此类操作,则需要重写该类(但在您的情况下可能不可能),或者直接修改库

    但是,在您的情况下,一个可能的解决方案是:

  • 使用库将SVG绘制到精灵
  • 将精灵绘制到位图数据中
  • 最后,使用
    getPixels()
    获取像素数据并将其序列化
  • 这样的事情应该行得通

    var sprite:Sprite = new Sprite();
    
    // Add the child to the stage...
    // Draw the SVG to the sprite...
    
    var bmpData:BitmapData = new BitmapData(spriteWidth, spriteHeight);
    bmpData.draw(sprite);
    
    var pixelData:ByteArray = bmpData.getPixels(new Rectangle(0, 0, bmpData.width, bmpData.height));
    
    // Here serialize the byte array
    

    在本例中,请注意spriteWidth/spriteHeight不一定是“sprite.width”和“sprite.height”(sprite通常报告的维度与您预期的不同)。因此,您需要提前确定渲染SVG的大小,并在构建
    位图数据时使用它,我认为这是不可能的。我本来打算建议修改库的源代码,但它似乎不可用。也许有其他的开源库?我不认为这是可能的。我本来打算建议修改库的源代码,但它似乎不可用。也许有其他的开源库?谢谢你的建议!不幸的是,我忘了提到我需要保持矢量图形。我是为移动设备写的,所以旧手机和新平板电脑之间分辨率的差异让位图成为一个真正的难题。为什么?使用它们的设备就是编写它们的设备,对吗?@TrickyWidget,我的理解是您需要将SVG转换为另一种格式。那会是哪种格式呢?我认为SVG已经是矢量图形的一种非常好的格式,为什么不保留它呢?@AmyBlankenship如果我使用位图,我必须将它们包装得足够大,以便在平板电脑上看起来很好,这对于手机来说是非常大的,或者为手机调整尺寸,这样在平板电脑上看起来会很糟糕。@Laurent我想要在AS3中快速加载和渲染的东西,而SVG没有。到目前为止,我能找到的最好的方法是序列化本机IGraphicsData。但我愿意接受其他选项,只要它运行良好(并且有望从SVG导入)。谢谢您的建议!不幸的是,我忘了提到我需要保持矢量图形。我是为移动设备写的,所以旧手机和新平板电脑之间分辨率的差异让位图成为一个真正的难题。为什么?使用它们的设备就是编写它们的设备,对吗?@TrickyWidget,我的理解是您需要将SVG转换为另一种格式。那会是哪种格式呢?我认为SVG已经是矢量图形的一种非常好的格式,为什么不保留它呢?@AmyBlankenship如果我使用位图,我必须将它们包装得足够大,以便在平板电脑上看起来很好,这对于手机来说是非常大的,或者为手机调整尺寸,这样在平板电脑上看起来会很糟糕。@Laurent我想要在AS3中快速加载和渲染的东西,而SVG没有。到目前为止,我能找到的最好的方法是序列化本机IGraphicsData。但我愿意接受其他选项,只要它工作良好(并且有望从SVG导入)。