保存动态绘图,然后重新加载

时间:2010-01-30 11:49:02

标签: flash actionscript-3

好吧,我花了很多时间试图找出解决这个问题的最佳方法......而且我有点不知所措。谷歌没有多大帮助。

我需要做的简短版本 - 通过AS3和PHP - 用户可以来这个项目并绘制一些东西。绘图没问题,已经完成了。我的问题是弄清楚如何获取绘图数据,将其转换为我可以保存到我的数据库的东西......然后重新加载所述数据并在用户“加载”它时在舞台上重新创建它。

我想我只是在寻找一种获取绘制数据的方法(只使用典型的as3绘图方法)并将其分解为字符串,然后将该字符串重新放入并重新创建它。我并不精通ByteArrays--我怀疑这是我的答案所在。

用户在加载后不需要调整任何一个,fwiw。我只想将这些绘图数据发送出去 - 然后将其重新放回舞台上。

非常感谢任何想法。

2 个答案:

答案 0 :(得分:0)

如果您使用的是Flash Player 10,则可以在新的Drawing API中使用新的类和方法:

的GraphicsBitmapFill
GraphicsEndFill
的GraphicsGradientFill GraphicsPath的
GraphicsPathCommand GraphicsPathWinding 的GraphicsShaderFill
的GraphicsSolidFill
的GraphicsStroke

您可以使用它们存储用户生成的绘图的数据,然后使用drawGraphicsData()方法从一组保存的命令中“恢复”绘图。

以下是文档中的示例:

package{
    import flash.display.*;
    import flash.geom.*;

    public class DrawGraphicsDataExample extends Sprite {
    public function DrawGraphicsDataExample(){    
    // establish the fill properties
    var myFill:GraphicsGradientFill = new GraphicsGradientFill();
    myFill.colors = [0xEEFFEE, 0x0000FF];
    myFill.matrix = new Matrix();
    myFill.matrix.createGradientBox(100, 100, 0);

    // establish the stroke properties
    var myStroke:GraphicsStroke = new GraphicsStroke(2);
    myStroke.fill = new GraphicsSolidFill(0x000000);

    // establish the path properties
    var myPath:GraphicsPath = new GraphicsPath(new Vector.<int>(), new Vector.<Number>());
    myPath.commands.push(1,2,2,2,2);
    myPath.data.push(10,10, 10,100, 100,100, 100,10, 10,10);

    // populate the IGraphicsData Vector array
    var myDrawing:Vector.<IGraphicsData> = new Vector.<IGraphicsData>();
    myDrawing.push(myFill, myStroke, myPath);

    // render the drawing 
    graphics.drawGraphicsData(myDrawing);
    }
    }
}

Senocular在Flash 10 Drawing API上有一篇很长但很好解释的文章。

HTH, 乔治

答案 1 :(得分:0)

对于pre-flash10,如果通过“典型的AS3绘图方法”,你的意思是在flash.display.Graphics对象上运行,例如lineTo()和curveTo(),那么你必须保存你做的调用Graphics对象以及参数。

请参阅http://www.senocular.com/?id=0.156的想法(遗憾的是,该项目似乎没有托管,但您会明白这一点。)