‘ActionScript’ カテゴリーのアーカイブ

FlashDevelop 3.0.0 RC5でエディタのフォント変更

2009年6月2日 火曜日

いつの間にかRC4が出てて、そろそろ入れようかと思ったら、RC5がリリースされていました。
インストールをして、エディタのフォントを変更しようと思ったら、Program SettingsにUI Editor Fontが見当たらないし、以前のようにScintillaNET.xmlに記述してみても変わらないので、いろいろGooglingしてみたけれど有益な情報が見つからず。
設定に絡んでそうなファイルを1つずつみていったら、どうやら\FlashDevelop\Settings\Languages以下の各言語ごとのXMLファイルのuse-stylesってノードで設定をする模様。
font=”Courier New”をfont=”Meiryo”に書き換えて、無事エディタのフォント変更ができました。
この辺りの設定はProgram Settingsからできた方がいい気が…。and ちょこちょこ設定周りの変更が入りつつ、頻繁なアップデートがあると、最新の状態を保ちつつ、設定を引き継ぐって作業に時間を取られることがだんだんとストレスになってきますね。。。
便利なツールを提供してもらっているので、基本感謝しなければいけないんですけども。

addCommand内での参照

2009年1月24日 土曜日

ProgressionのaddCommand内で、下記コードのように、AddChildする_mcのnewを同じaddCommand内のFuncコマンドで行うと、AddChildコマンド実行時の_mcがnullとなりエラーになってしまう。

  1. private var _mc:MovieClip;
  2.  
  3. private function _init():void
  4. {
  5.     _mc = new MovieClip();
  6. }
  7.  
  8. protected override function _onCastAdded():void
  9. {
  10.     addCommand
  11.     (
  12.         new Func( _init ),
  13.         new AddChild( this, _mc )
  14.     );
  15. }

タイミング的な問題なのか、スコープの問題なのか、いろいろ条件を変えて試してみたけど上手くいかずハマっていたので、Twitterで聞いてみたところ、『addCommand内の参照は、addCommandする時点の参照になる』と教えてもらうことができた。
なるほど。
addCommandした時点にnullなので、addCommand内のFuncコマンド内でnewしても、nullだった頃の_mcが参照されているということの模様。
タイムマシン的。

次のように書き換えて解決。
_onCastAdded時に_initメソッドでインスタンス化、_onCastRemoved時に(例えば)_finalメソッドで明示的にnullにしてメモリリークしないように気をつけようと思ったので、初期化処理から配置まで一連の流れをひとつのaddCommandに書けたらスッキリするのになぁと思いつつなのだけど。

  1. private var _mc:MovieClip;
  2.  
  3. private function _init():void
  4. {
  5.     _mc = new MovieClip();
  6. }
  7.  
  8. protected override function _onCastAdded():void
  9. {
  10.     _init();
  11.     addCommand( new AddChild( this, _mc ) );
  12. }

ところで、解決方法を模索しているとき、Commandクラスにscopeというプロパティを見つけた。
ASDocではtimeOutのコメントがコピペされていたw
ソースを辿っていくと、Functionクラスのapplyメソッド第一引数に渡されているので、コマンドを別オブジェクトで実行できそう?
コマンド伝播ができない場合に有効だったりしないかな??
時間があるときに検証してみたいと思う。