[1703] Re:オセロについて
投稿者:(ぱ)こと管理人
2011/02/14 02:17:25
大変遅くなってしまいましてすみません。学生さんがまだここを見ているかどうかも
わかりませんが…
>>石がひっくり返るアニメーションの前に、既にBoard内のデータは
>>書き換えられているので、もしその前に画面の再描画が動いてしまえば
>>現状のような現象になると思うのですが、すみませんが最近どたばたしていて
>>私のほうでは原因が追えていません。
>
>自分の方で調べて直してみたのですができませんでした。
>
>今、お忙しそうですが原因がわかったらでいいので教えてもらえるとありがたいです。
Board.javaのput()メソッドの中のwindow.redraw()を抜けばよいようです。
このメソッドは、最終的にはCanvasのrepaint()を呼び出すことで、オセロの
盤面の再描画を行います。石を置いた後、アニメーションとともに画面の更新は
終わっているのですが、「念のために」全体の再描画をかけているわけです。
しかし、AWTにおけるrepaint()は非同期なので、即座に実行されるとは限りません。
この再描画要求が、「次に石を置き、盤面の状態は変わったが、アニメーションの前」
という状況で実行されると、アニメーション前に盤面の絵が更新されてしまいます。
ソースは近日中に差し替えます。ご指摘ありがとうございました。