SimpleButtonが不安定だったのを解決できた
ウィンドウなどについているSimpleButton(を拡張したボタン)が、ウィンドウが動くと効かなくなる不具合にずっと悩まされていた。
(不本意な回避法として、移動がかかるたびにボタンのremoveと再生成をしていた。)
原因は、downState、overState、upStateなどのマウス操作に合わせて切り替えるイメージとマウスの効くエリアを指示するhitTestStateを使いまわしていたことだった。
upState = upShape;
hitTestState = upShape;
みたいな具合。
こうしてしまうとボタン(やその親)が移動したとき、hitTestStateだけが移動できないで、結果ボタンが効かなくなってしまう。現在のガジェットOSで確認されたい orz
以上の解決にたどり着くまで、SimpleBututton.asはいったいどうなっているんだ?、とソースを探したけど見つからなかった。
しかし、Adobeのマニュアルでは、hitTestStateに新しいDisplayObjectを生成して当てていたので、解決できた。またサンプルではボタンに新しいクラスをあてがっている。クラス化していないボタンでも挙動に問題はないけど、以前Dockでクラスを解除した書き方をしたら挙動がおかしくなったので、クラスにしておいたほうがいいのかもしれない。
downState、overState、upStateについては、イメージ用のオブジェクトを使いまわしても、今のところ問題は出ていない。また、件の移動が起きない場合は、hitTestStateにもオブジェクトを使いまわして構わない。
(不本意な回避法として、移動がかかるたびにボタンのremoveと再生成をしていた。)
原因は、downState、overState、upStateなどのマウス操作に合わせて切り替えるイメージとマウスの効くエリアを指示するhitTestStateを使いまわしていたことだった。
upState = upShape;
hitTestState = upShape;
みたいな具合。
こうしてしまうとボタン(やその親)が移動したとき、hitTestStateだけが移動できないで、結果ボタンが効かなくなってしまう。現在のガジェットOSで確認されたい orz
以上の解決にたどり着くまで、SimpleBututton.asはいったいどうなっているんだ?、とソースを探したけど見つからなかった。
しかし、Adobeのマニュアルでは、hitTestStateに新しいDisplayObjectを生成して当てていたので、解決できた。またサンプルではボタンに新しいクラスをあてがっている。クラス化していないボタンでも挙動に問題はないけど、以前Dockでクラスを解除した書き方をしたら挙動がおかしくなったので、クラスにしておいたほうがいいのかもしれない。
downState、overState、upStateについては、イメージ用のオブジェクトを使いまわしても、今のところ問題は出ていない。また、件の移動が起きない場合は、hitTestStateにもオブジェクトを使いまわして構わない。