LoginSignup
3
2

More than 1 year has passed since last update.

多人数同時編集の出来るお絵描きチャット"えんぴつチャット"でのUndo/Redoの実装について詳細

Last updated at Posted at 2021-10-06

スクリーンショット 2021-10-06 095141.png
https://minordaimyo.net/pencilchat/

基本事項

描画の履歴情報は、描線1本ごとに持つ

履歴情報の詳細

描線一つに付き、以下の履歴情報を保持する。
・描画範囲(矩形)
・undo/redo用の、描画前のbmp画像(描画範囲の領域分だけ保持)
・描画開始時刻
・描画終了時刻
・undoを実行した際の時刻

undo実行時の処理

描画開始時刻以降に、描画範囲と重なる別の描画が存在するかどうかを調べる。
(別の描画の時刻は、描画終了時刻を比較対象とする)
存在しなければundo実行。
undo実行時刻を記録する。

redo実行時の処理

undo実行時刻以降に、描画範囲と重なる別の描画が存在するかどうかを調べる。
(別の描画の時刻は、描画終了時刻とundo実行時刻の内、新しい方を比較対象とする)
存在しなければredo実行。
undo実行時刻をクリアする

その他

履歴情報の数が上限に達した場合の処理も必要。
上限に達して一番古い履歴情報を削除する際には、描画範囲矩形と描画終了時刻を別途保持する必要がある。

現時点での"えんぴつチャット"では、履歴は一人当たり最大32段までにしてある。
最大参加人数は8人なので合計256段。
これくらいなら衝突チェックも総当たりで十分行ける。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2