簡體   English   中英

命令模式:如何執行連續動作? (例如,移動物體)

[英]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()的代碼不簡單怎么辦? 如何避免ShapeEditorMoveCommand代碼重復?

這很好用,但是如何顯示運動預覽(當用戶按住鼠標按鈕時),然后僅在釋放鼠標按鈕時存儲最終偏移量?

如果我對您的理解正確,那么您想使整個運動無法執行/只能重新執行,同時在首次交互完成時為每個微動動動畫。

一種解決方法是您自己建議,即僅在移動完成后才記錄undo / redo命令。 如您所指出,這會導致某些代碼重復。 實際上,這不是問題,因為您可以隨時將這些通用代碼排除在外。

另一種方法是為每個微動創建一個MoveCommand,然后將命令合並作為撤消/重做堆棧的一部分。 查看如何在Qt中完成

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM