我有一个半新手的问题。我已经编程多年了,但我早期的经验都是在OOP之前,我的大脑就这样解决了。我也是Actionscript的新手。所以希望这对某人来说很容易。
我正在使用as3svgrendererlib来导入SVG。它工作得很好,但我需要能够序列化它输出的图形。但我不能序列化精灵,所以我必须一直到IGraphicsData级别才能得到我能做到的东西。但图书馆没有给我这些数据。它只给了我精灵。所以我需要改变它。
由于最终只使用了少数几种绘图方法(beginFill
,drawRect
等),我的想法是,如果我可以挂钩并用我自己的代码补充它们输出IGraphicsData,然后我就会开展业务。现在我知道我可以通过使用“扩展”类来实现这一点,但这需要对库进行大量修改,以便将所有标准调用更改为自定义类。
所以我想知道:是否有一种神奇的OOP方式来编写方法,这些方法将普遍拦截对现有方法的调用,而无需修改原始调用?
谢谢! :)
编辑:我需要独立于分辨率,因此将图形保留在矢量中并且不将它们转换为位图非常重要。
答案 0 :(得分:0)
您不能在OOP中执行此类操作,您需要覆盖该类(但在您的情况下可能无法实现)或直接修改库。
但是,在您的情况下,可能的解决方案是:
BitmapData
。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”(精灵通常报告尺寸与您的预期不同)。因此,您需要事先确定渲染SVG的大小,并在构建BitmapData
时使用它。