元に戻すをサポートするペイント プログラムを作成する方法を調べていますが、おそらくコマンド パターンが必要であることがわかります。誰かが簡単な答えや確認を提供してくれることを願っています。
基本的に、コマンドを元に戻す機能を具体化する場合、たとえば画面に塗りつぶされた円をスタンプする場合、円がメモリにカバーするフレーム バッファーをこのコマンド オブジェクトに本質的にコピーする必要があるということですか? たとえば、ランダムなピクセル色の束をスタンプするなど、元に戻すことができる他の方法はありません。
1 つのアプローチは、前方アクションを追跡するだけであり、元に戻す操作が実行されると、ステップ 1 から開始して元に戻す前のステップに前方描画するだけであると聞いたことがありますが、大規模なアクションをサポートする場合、これは実行不可能に思えます。スタックを元に戻します。
おそらく、解決策は、15 ~ 20 アクションごとのビットマップを保持し、最後の「保存」転送から開始する間の何かです。
この場合、コマンドでバッファの四角形を保存するか、すべてのアクションをやり直すか、または私が完全に見逃した何かについて、誰かが洞察を提供できますか?
更新: 良い反応がたくさんあります。みんな、ありがとう。私が読んでいることから、Nアクションごとにバッファを保存し、ユーザーが元に戻すコマンドを発行すると、最後に保存されたバッファからすべてのコマンドをやり直すことでこれにアプローチすると考えています。N を可能な限り高い値に微調整することはできますが、(メモリ使用量を最小限に抑えるために) レスポンシブな元に戻す必要があるというユーザー エクスペリエンスを著しく低下させることはありません。これはそれほど悪くないので、1 つのフレームでかなりの数のアクションを実行することで逃げることができます。願わくば、このアプローチにより、他の方向に切り替えるかどうかをすばやく判断し、代わりにそれを必要とするアクションのために以前の状態のビットマップ四角形を保存することができます.