![](/img/trans.png)
[英]How do I instantiate objects and have them still be available outside of their scope? (e.g. instantiated an object in a loop)
[英]Command pattern: how can I do continuous actions? (e.g. moving an object)
假設我正在編寫一個程序,用戶可以在其中繪制然后移動形狀。 然后, MoveCommand
可能如下所示:
class MoveCommand {
public:
MoveCommand(Shape& shape, const Vector2f& offset) :
shape(shape), offset(offset)
{ }
void execute() {
shape.move(offset);
}
void undo() {
shape.move(-offset);
}
private:
Shape& shape;
Vector2f offset;
};
這很好用,但是如何顯示運動預覽(當用戶按住鼠標按鈕時),然后僅在釋放鼠標按鈕時存儲最終偏移量?
ShapeEditor
類是否應該移動形狀,然后在釋放按鈕時創建MoveCommand
? 如果execute()
的代碼不簡單怎么辦? 如何避免ShapeEditor
和MoveCommand
代碼重復?
這很好用,但是如何顯示運動預覽(當用戶按住鼠標按鈕時),然后僅在釋放鼠標按鈕時存儲最終偏移量?
如果我對您的理解正確,那么您想使整個運動無法執行/只能重新執行,同時在首次交互完成時為每個微動動動畫。
一種解決方法是您自己建議,即僅在移動完成后才記錄undo / redo命令。 如您所指出,這會導致某些代碼重復。 實際上,這不是問題,因為您可以隨時將這些通用代碼排除在外。
另一種方法是為每個微動創建一個MoveCommand,然后將命令合並作為撤消/重做堆棧的一部分。 查看如何在Qt中完成 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.