繁体   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