【发布时间】:2012-10-22 10:23:10
【问题描述】:
我正在尝试构建更改历史记录,而不是 diff 样式历史记录,我选择保存整个对象。 这会成为问题,因为对象的每个副本都会与原始对象一起更新。
Kinetic.Node.clone 方法对我来说似乎是正确的,但它似乎并没有达到我的预期。
伪代码:
var History = function(){
var h = this;
h.history = [];
h.pointer = -1;
h.save = function() {
h.history = h.history.slice(0,h.pointer);
h.history.push(im.Stage.createCopy());
h.movePointer(1);
};
h.movePointer = function(diff) {
h.pointer += diff;
(h.pointer < 0 && (h.pointer = 0));
(h.pointer >= h.history.length && (h.pointer = h.history.length-1));
return h.pointer;
};
h.render = function() {
im.Stage = h.history[h.pointer].createCopy();
im.Stage.draw();
};
h.undo = function() {
h.movePointer(-1);
h.render();
};
h.redo = function() {
h.movePointer(1);
h.render();
};
};
如何创建准确的舞台副本?
【问题讨论】:
-
IIRC,克隆不能很好地工作,因为基础参考保持不变,这对我来说也是一个问题。如果你想克隆整个舞台,为什么不能使用 toImage?
-
@mickylaaaad 简单输出到图像的问题在于它不存储当前状态,它只存储画布的渲染版本。克隆的问题似乎是已知的并且正在修复中,但即使使用工作版本,每次更改保存阶段也非常慢。为了加快速度,我已经开始保存图层数组,但这仍然相当低效。
标签: clone kineticjs revision-history