Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 保存动态图形,然后重新加载_Flash_Actionscript 3 - Fatal编程技术网

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

Flash 保存动态图形,然后重新加载,flash,actionscript-3,Flash,Actionscript 3,好的,我花了很多时间试图找出解决这个问题的最佳方法。。。我有点不知所措。谷歌没有得到多少帮助 我需要做的简短版本——通过AS3和PHP——是一个用户可以来到这个项目并绘制一些东西。画没问题,画完了。我的问题是如何获取图形数据,将其转换为可以保存到数据库中的数据。。。然后重新加载所述数据,并在用户“加载”数据时在舞台上重新创建 我想我只是在寻找一种获取绘制数据的方法(仅使用典型的as3绘制方法)并将其分解为一个字符串,然后将该字符串带回并重新创建它。我对bytearray不太精通——我怀疑这就是我

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

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

我想我只是在寻找一种获取绘制数据的方法(仅使用典型的as3绘制方法)并将其分解为一个字符串,然后将该字符串带回并重新创建它。我对bytearray不太精通——我怀疑这就是我的答案所在

用户不需要在加载后调整任何内容,fwiw。我只想把这些绘图数据发送出去,然后把它带回来,放回舞台上


非常感谢您的任何想法。

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

GraphicsBitmapFill
GraphicsSendFill
图形半径填充 图形SPATH
图形命令 图形拼接 图形阴影填充
GraphicsSolidFill
图形行程

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

以下是文档中的一个示例:

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);
    }
    }
}
包{
导入flash.display.*;
导入flash.geom.*;
公共类DrawGraphicsDataExample扩展了Sprite{
公共函数DrawGraphicsDataExample(){
//建立填充特性
var myFill:GraphicsGradientFill=新的GraphicsGradientFill();
myFill.colors=[0xEEFFEE,0x0000FF];
myFill.matrix=新矩阵();
myFill.matrix.createGradientBox(100100,0);
//建立笔划属性
var myStroke:GraphicsStroke=新的GraphicsStroke(2);
myStroke.fill=新图形滑动填充(0x000000);
//建立路径属性
var myPath:GraphicsPath=新的GraphicsPath(新向量(),新向量();
myPath.commands.push(1,2,2,2);
myPath.data.push(10,10100100100100,10,10,10);
//填充IGSData向量数组
变量myDrawing:向量。=新向量。();
myDrawing.push(myFill、myStroke、myPath);
//渲染图形
图形.绘图图形数据(myDrawing);
}
}
}
Seneyular有一篇很长但解释得很好的文章

嗯,, George

对于flash10之前的版本,如果“典型的AS3绘图方法”是指使用lineTo()和curveTo()等工具对flash.display.Graphics对象进行操作,则必须保存对图形对象的调用以及参数


关于这个想法,请参见(不幸的是,项目似乎没有被托管,但你会得到这个想法)。

为了完整性,最好对Graphics类进行子类化并重新实现其所有方法,其中重新实现的方法做两件事:1)保存方法调用(可能附加到字符串)2)调用原始的超级方法。哇,谢谢你的礼物,乔治-看起来很棒!今晚我要为你干杯罗恩的文章链接很方便,我也没有关于数据库部分的提示