问题描述
|
对于我的图块编辑器,我有2叠TileMaps,撤消和重做。每次用户进行更改时,都会将地图的状态添加到堆栈中,然后进行更改。这是我的撤消代码:
private void undoToolStripMenuItem_Click(object sender,EventArgs e)
{
if (undo.Count != 0)
{
redo.Push(tileMap);
tileMap = undo.Peek();
undo.Pop();
}
}
但是,地图不会更改。为什么?
解决方法
如果不是UI更新问题...
您是否重做和撤消了对不同堆栈对象的引用?如果它们都引用同一个堆栈对象,那么您的代码将仅推送并弹出当前状态。
还是类似地,您是否要推送另一个对相同tileMap对象或它的副本的引用? (即,您可能想要
Push(tileMap.DeepCopy())
)
另外,为什么要先窥视然后弹出?您可以直接直接弹出tileMap中。
, 如果撤消和重做只是堆栈对象,则什么也不会发生。相反,您需要添加代码以在撤消操作时实际更新UI。在这种情况下,我想您会使用从堆栈中弹出的当前tileMap重绘地图。