2010年8月アーカイブ

AS2.0までは、MovieClipを一括で取得するのに、for 〜 in を使ってたんだけど、AS3.0では使えない。コレの代替案を発見。発見は大げさか・・・(^^;。

下記のように表示リストから検索すればいいわけです。

//mcリスト作成
var array_mc:Array = new Array();
for (var i:int = 0; i<this.numChildren; i++) {
 var target:MovieClip = this.getChildAt(i) as MovieClip;
 array_mc.push(target);
}

もう以前から使っている方法なんだけど、ついAS2.0のクセで「for 〜 in」を使って「アレ?」ってことになるので、改めて備忘録として書いておきます。


クラスをストリングで参照する方法をつぶやいたら、早速野中さん@FumioNonaka)からご教授いただいたのでメモ。感謝。

var myClass:Class = getDefinitionByName("flash.display.Sprite") as Class; 
trace(new myClass());

getDefinitionByName() が、Stringで指定したクラスのクラスオブジェクトへの参照を返してくれるのですね。

何をしたかったかというと、ライブラリのリンケージで指定したクラスを場合によって差し替えたかった...ということです。例えば、ライブラリにbtn0,btn1,btn2,...と複数のボタンがあったとして、下記のような関数で...

function xGetCurrentBtn(num:int):SimpleButton {

//クラスをストリングで参照
var myClass:Class = getDefinitionByName("btn" + num) as Class;
var btn:SimpleButton = new myClass();

return btn;
}

みたいな感じです。

放置状態だった「FLASHで作る AIRアプリケーション レシピブック」を再開。この中にファイルをデスクトップ等にドロップして保存するサンプルがあるのだけれど(RECIPE 003)、これを自分で書いてみたら、うまく動かなかった。

具体的には初回のみ成功して、2回目以降はNG(Finder側に移動不可マークが出る)。ムービープレビューをやり直しても、Flashを再起動してもダメで、OSを再起動しないとうまくいかない(それでもOS再起動後1回のみで、あとはNG)。

具体的なファイル保存の方法は・・・

1.一時ディレクトリを作成(File.createTempDirectory())
2.一時ディレクトリに保存ファイルを作成(File.resolvePath())
3.FileStreamで保存ファイルにBitmapDataを書き込み(FileStream.writeBytes())

とファイルを作っておいて、ファイルをドラッグ開始したときに

1.クリップボードに保存ファイルをセット(Clipboard.setData())
2.ドラッグ処理を設定(NativeDragManager.doDrag())

して、ドラッグ完了時に・・・

1.クリップボードの保存ファイルが、ドロップした場所に移動する
(NativeDragActions.MOVE/自動で行われる)
2.一時ディレクトリを削除する(File.deleteDirectory(true))

という手順になっています。

いろいろ調べてみると、どうも一時ディレクトリで引っかかっているようで、一時ディレクトリの削除をはずすと問題なく動作する。削除自体はエラーにならないけど、ちゃんと解放されていないとか、そんな感じなのかな?

ただ一時ファイルは削除しないと新規に作られ続けるので、明示的にディレクトリを作って、それを削除する方法に変更した。具体的には・・・

1.File.desktopDirectoryとFile.resolvePath()を使って、明示的なディレクトリを作成
(File.createDirectory())
2. 明示的なディレクトリを削除する(File.deleteDirectory(true))

という感じに変更しました。

テスト環境はMacOSX10.5.8+Flash CS4です。サンプルファイルのAIRでも同様でした。但し知人にWindows Vista+Flash CS3で試してもらったところ、問題なく動作したらしい。OSXの問題なのか、AIR1.5なのか、CS4なのか...。特定できませんでしたが、とりあえず対処できたので良しとします。

書籍のサンプルファイルはサポートページからダウンロードできるので、気になる方は試してみて下さい。もし何かわかったら教えて下さい。


このアーカイブについて

このページには、2010年8月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2010年7月です。

次のアーカイブは2010年9月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。