« 7000兆円要求 | Home | AS3での埋め込みフォントの共有について:其の参[ランタイム共有ライブラリ編](未解決) »

Feb 072009

AS3での埋め込みフォントの共有について:其の弐(未解決)

AS3での埋め込みフォントの共有について:其の壱の続き。
(今朝方一度共有ライブラリでのエントリーをアップしましたが、ちょっとまだ問題あったので削除しました。ハテブとかに登録された人スイマセン・・・。追ってまた整理します)


子swfに含まれるFontクラスを用いたフォントの共有は親swfにそのフォントが含まれていると親側ではレンダリングされないということを書きました。恐らくこれはFontクラスは各ApplicationDoamin内グローバルに定義されており、TextFormat等で使用するフォント名はそのFontクラス自体を参照するのではなく、フォント名からApplicationDoamin内のフォントクラスを逆引きするという仕様のような気がします。(ただまぁそうするとApplicationDomain.currentDomainで動作するのもおかしいか・・)

まぁそんなことを考えても仕方が無いので、解決策を考える。

先のエントリーでは子swf内で生成したTextFieldにTextFormatを指定してやれば、適応が可能だというところまで書きました。んが、まぁ正直使えないので今度はFontの実体化のタイミングの視点からコンフリクトを解消できないか調べます。

つまり、「子swfの中のFontクラスを先に定義してしまう」ということ。具体的には「子swfの読み込み+Fontクラスの実体化が、親swfの中の同じフォントの実体化よりも先に完了するように。」するということになります。

これにはタイムラインを使用します。まず、親swf上の静的テキストを2フレーム目に配置。1フレーム目には共有するフォントを配置しないようにします。
090207a.jpg

次にドキュメントクラスをMovieClip継承にしてコンストラクタに以下を追加。

stop();//1フレーム目で停止
addFrameScript(1, _on2);//2フレーム目に発動する関数定義
子swfを読み込んでフォントのレジストが完了した後に次のフレームへ移動。 (ステージだとgotoAndStopが上手く動かないみたいなので、playで)
private function _onComp(e:CastEvent):void
{
	var loader:CastLoader = e.target as CastLoader;
	loader.removeEventListener(CastEvent.CAST_LOAD_COMPLETE, _onComp);
	_registClass1();//フォントクラス初期化
	play();//次のフレームへ
}

で、2フレーム目で発動する関数"_on2"は

private function _on2():void
{
	stop();//このフレームで停止
	//コンテンツの初期化
}
といった感じ。これで解決できたか?!と思ったのですが、駄目でした(涙

子供のswfのフォントを先に初期化しても、その後親swfの上で静的テキストが出現した後に動的テキストでレンダリングされなくなる。Fontが上書きされているのか??ただ、その後子swfのクラスを取得して再度フォント定義してやってもNGでした。フォントの管理はapplicationDomainとは無縁なのか、applicationDomainを切り離してみても駄目でした・・・。

ということでいまだ解決せず・・・汗

一応使えないソースはwww.img8.com/src/test_font2_2.zipから・・・。

はぁ・・・

Leave a comment

Search and Archives