1

所以我设法学习了一些 Flex 并创建了一个小应用程序:

  • 将图像加载到 Image 组件
  • 使用矩阵变换图像(旋转、翻转)
  • 应用过滤器

现在我正在考虑创建一些撤消重做功能。每次我进行转换/添加过滤器时,我都希望能够返回到上一个图像(在动作之前)。

我的想法是有一个数组并将前一个位图添加到堆栈中。但我看到转换和过滤器之间存在一些差异,我也看到了 ImageSnapshot 和我能做什么,它看起来就像我所追求的。

总的来说,我对 Flex 有点陌生,我希望这里有人可以给我任何建议,并希望能给我一些指导。

感谢您的任何建议!此致,

4

1 回答 1

0

我建议研究命令设计模式

本质上,您的数组将不包含图像,而是代表对图像进行的操作的标记。每个令牌都有足够的信息来撤消(和重做?)其操作。

var c:Command = new RotateCommand(90, CLOCKWISE);
c.doWork();
history.push(c);

// Undo
var c:Command = history.pop();
c.undoWork();

然后在命令中,大致:

public function doWork():void {
    var newTransform:Matrix = calculateTransform(angle, direction); // 90, CLOCKWISE
    image.transform.matrix.concat(newTransform);
}

public function undoWork():void {
    var newTransform:Matrix = calculateTransform(-angle, direction); // reverse operation
    image.transform.matrix.concat(newTransform);
于 2010-01-21T20:09:06.800 回答