我需要做的简短版本 - 通过AS3和PHP - 用户可以来这个项目并绘制一些东西。绘图没问题,已经完成了。我的问题是弄清楚如何获取绘图数据,将其转换为我可以保存到我的数据库的东西......然后重新加载所述数据并在用户“加载”它时在舞台上重新创建它。
我想我只是在寻找一种获取绘制数据的方法(只使用典型的as3绘图方法)并将其分解为字符串,然后将该字符串重新放入并重新创建它。我并不精通ByteArrays--我怀疑这是我的答案所在。
用户在加载后不需要调整任何一个,fwiw。我只想将这些绘图数据发送出去 - 然后将其重新放回舞台上。
非常感谢任何想法。
答案 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的想法(遗憾的是,该项目似乎没有托管,但您会明白这一点。)