1

現在、python と pygame を使用してペイント プログラムの作成に取り組んでいます。現在、プログラムで元に戻す/やり直し機能を作成するのに問題があります。私が考えていた方法は、ユーザーがマウスを離すたびにキャンバス画像を保存することですが、プログラムを閉じた後に削除される一時フォルダーに個々の画像を保存する必要があるかどうかはわかりません. この方法がプログラムのパフォーマンスに影響を与える可能性があることも読んだので、より効率的に機能する他の方法があるかどうか疑問に思っています。ありがとうございました。

4

2 に答える 2

2

コピーをファイルに書き込むのは少し手間がかかりますが、無制限に元に戻す必要がありますか? pythons collections.dequeのようなものを循環バッファーとして使用して、最後の N 個の変更を保存することをお勧めします。これにより、クリーンアップとディスク ストレージについて心配する必要がなくなります。毎回完全なスナップショットを作成するとパフォーマンスが大幅に低下することが判明した場合は、ユーザーが実行した最後のアクションに基づいて、保存された各領域を特定の境界ボックスに制限することを検討する必要があります。

于 2013-12-29T16:35:07.640 に答える
1

私の提案は、実行された最後の操作のバッファを持つことです。各操作は、スプライトと、スプライトが配置される位置で構成されます。

キャンバスと、そのバッファからのすべてのスプライトを描画します。バッファ内に多くのスプライトがある場合、最も古いスプライトをキャンバスにブライトすることができるため、メモリを節約できます。

元に戻す自体はかなり簡単です。追加された最後のスプライトを削除するだけです。

やり直しは少し難しくなります。削除する代わりに、描画する最後のスプライトを指すポインターがあるためです。新しいアクションが追加される場合にのみ、「見えない」スプライトをすべて削除します。

于 2013-12-29T17:49:16.737 に答える