2010年03月01日

3月1日のバグ

本日は UnDo に関するバグです。実は、UnDo 処理を作成した時にはうまく動作していたのに、いつも間にか動作しなくなっていたとういうよくあるパターンのバグです。

バグを発生させるには、グループアイテムと四角形アイテムを1つずつ用意します。そして、四角形アイテムをグループアイテムに加えます。

  

この状態で「Ctrl + Z」キーを押して UnDo 処理を行うと下のようにアイテムが分身します。ふらふら



グループにアイテムを加えるという処理は3つのコマンドからできていまして、

1.アイテム移動
2.アイテムの座標をグループの相対座標に変換
3.アイテムをグループアイテムに加える。

UnDo 処理を行う場合はこのステップを逆に行うのですが、[3.アイテムをグループアイテムに加える]の逆、[アイテムをグループから除く]処理を行った際に、アイテム毎に振ってあるIDがズレてしまって、以降アイテムが行方不明になってしまうという、説明の難しい状態になってしまうのです。

四角形アイテムがグループアイテムに入っている時はこうなっているのですが、

・グループアイテム⇒ID:0
 ┗四角形アイテム⇒ID:1

四角形アイテムがグループから外に出た時に四角形アイテムのIDが新しく振りなおされてしまい

・グループアイテム⇒ID:0
・四角形アイテム ⇒ID:2

こうなってしまっていました。

操作履歴情報はアイテムIDで管理されているので、IDがずれると処理が成り立たなくなってしない。あのようなバグになったしだいです。
修正は if文1行で済みましたが、前は動いていたよな???ってちょっと疑心暗鬼になってしまいました。
posted by j.shiozaki at 21:18| Comment(0) | TrackBack(0) | J.S Draw
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/35818457
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック