2011年4月23日土曜日

FlashIDEでSWCを作ってクラスライブラリとして使う

http://www.fukei-shashin.co.jp/1000messages/
このプロジェクトも大分ソースが大きくなってきたので、
コンパイルの高速化を見込んでFLAのアセットなどを部分的にSWCにておきたいと思った。

ちょっと解った事をまとめるとこんな感じ。

まず、SWCへはライブラリウィンドウから右クリックで書き出すだけ。
クラスの定義はこの場合「コンポーネント定義」は無効で、 (コンポーネントではないから)
シンボルのプロパティーから定義したクラスの内容が有効になる。

SWCのファイル名はコンパイルの何にも影響しないみたいなので何でも大丈夫みたい。
コンパイルするものからライブラリへのパスだけ通しておく。
今回はFlashCS5Proのパブリッシュ設定、Flash、Actionscript3.0設定からライブラリパスにファイルを直接追加した。

注意点はFLA内にそのままクラスのシンボルがある場合(つまりSWCを使わずに)、
そのシンボルの定義を、クラス(as)ファイルの定義内容が、
シンボルでの定義内容が生きたまま機能追加されるのだけど、
(例えばシンボル内のインスタンスはクラスの定義として生きたまま、
 クラスファイル内の定義でもインスタンスオブジェクトとして利用出来る。)
SWCに書き出したクラスと同じ名前でクラス(as)ファイルで同じ事をしようとすると、
「定義の重複」になってしまい定義出来ない。

よって同じ事をしようとする場合、まずSWCに書き出したクラスを継承して、
新しいクラスを定義する必要がある....

ということまで解った。


どうも、探してもこの辺りの事はAdobeのドキュメントには書いてないらしく、
ただ、Flashのプロの人たちは普通にやってるっぽいのだけど、関連する情報が見つからなくて試すしかなかった.....
他に情報があればどなたか。

2011年4月10日日曜日

AS3でクリックされた表示オブジェクトの特定(target取得)

マウスイベントからクリックされたターゲットを特定するのはターゲットにidの変数等を初期化時にセットしておき、イベントオブジェクトのターゲットのプロパティとしてidを取得する方法が有効。
しかし、表示オブジェクトが、複数のパーツをまとめるため等の理由で、深くネストされている場合、ネストの一番奥のオブジェクトがターゲットとして戻されるので、親やその親の表示オブジェクトを参照する必要がある。
そのため、オブジェクトの構造が複雑な場合、どの深さのオブジェクトがターゲットになるかで、何れだけ上の親を呼ぶか、ターゲットの位置で変わってしまう場合がある。
この問題はmouseChildrenプロパティーの設定である程度コントロール出来る。


mouseChildren プロパティ
mouseChildren:Boolean [読み書き可能]

オブジェクトの子に対してマウスが有効かどうかを調べます。オブジェクトが使用可能なマウスの場合、マウスを使用して対話できます。デフォルト値は true です。

このプロパティは、SimpleButton クラスではなく、Sprite クラスのインスタンスを使用してボタンを作成するときに役立ちます。Sprite インスタンスを使用してボタンを作成する場合、他のSprite インスタンスを追加するために addChild() メソッドを使用してボタンの修飾を選択できます。子として追加する Sprite インスタンスは、親インスタンスをターゲットオブジェクトとすることを想定するときに、マウスイベントのターゲットオブジェクトとなる場合があるため、マウスイベントについて予期しない動作を引き起こす可能性があります。親インスタンスが確実にマウスイベントのターゲットオブジェクトになるようにするには、親インスタンスのmouseChildren プロパティを false に設定します。

このプロパティを設定しても、イベントは送出されません。インタラクティブな機能を作成するには、addEventListener() メソッドを使用する必要があります。

2011年4月9日土曜日

flac+cue を読み込み曲ごとに分割して保存:MacOSX用

GUI版とCUI版がある。
GUI版を使っているけどとても使えるツール。
http://tmkk.pv.land.to/xld/

2011年4月5日火曜日

AS3でゼロ詰めの数値文字列を作るため数値の桁数を計算する

とりあえず。
trace(int(Math.log(9)*Math.LOG10E+1));
trace(int(Math.log(99)*Math.LOG10E+1));
trace(int(Math.log(100)*Math.LOG10E+1));
trace(int(Math.log(1000)*Math.LOG10E+1));

出力

1
2
3
4