カテゴリー
Develop

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

以前apeirophobia: 特定の文字だけを埋め込んだフォントのランタイム共有方法(AS 2.0)というエントリーをいたけど、今度は版。既出のリソースとしては
FACEs: as3:フォントのダイナミックなローディング
CS3版 フォントのダイナミックなローディング|_level0.KAYAC
あたりが有名なところ。
で、このやり方で読み込む親SWFの中に同じを用いた静止テキストを配置すると、フォントが表示されなくなるというがある。これはPlayer8以前に見られたフォントのconflictと同じような状態(詳細はapeirophobia: 特定の文字だけを埋め込んだフォントのランタイム共有方法(AS 2.0))。恐らくフォントが親SWFで先に設定されてしまうことで、外部SWFのフォントクラスが適応されないというのが理由だと思う。(そう考えるとPlayer8の原因とは違うのかもしれないけど)
簡単に検証したい人はCS3版 フォントのダイナミックなローディング|_level0.KAYACのサンプルをDLして、loader.flaのステージ上にAXIS Std Hで静的テキストを配置すると再現できます。
AS3から外部SWFのクラスApplicationDomainの設定も絡んできて、ちょっと原因の切り分けがややこしくなっているので、検証してみました。
なんか良く分からない部分もあるのですが、とりあえずないようにダラダラ書いておきます。

カテゴリー
Develop

MovieClip.addFrameScript

には幾つかundocumented functionが存在するのだけど、そのうちの一つ”addFrameScript”。
存在は知っていたのだけど、今まで上手く動作せず、どーしたもんかしら?と放置していた。ちと今回どうしても使いたくなってきたので改めてを見てみたらこんな感じだった。

// NON-DOCUMENTED (MANUAL ADDITION)
/**
* Attach a callback method to a frame. Note that this will replace any timeline code or
* previously attached callback.
* The callback method should not expect any parameter.
* @param frame Target frame number (starting from 0).
* @param notify Callback method to attach.
*/
public function addFrameScript(frame:uint, notify:Function):void;

やー (starting from 0).だった。これだけで長い間放置していた・・・汗
ちなみに複数フレームに一気に追加する場合には

削除する場合には

となります。
ちなみにflashguruでは

というような記述がありますが、これは動作確認取れませんでした。
ちなみにの”ExMovieClip”ではループ再生制御のためにコンストラクタで

されているので、ループさせる場合等には1フレーム程多目にフレームを定義しておかないとフレームアクションが上きされてしまいます。
Ref.FlashGuru Consulting – Undocumented Actionscript 3

カテゴリー
Develop

ニャホアーーー

Inheritance — Flash CS3
この辺ではまり中・・・・。
EventDispatcherのStatic化も面倒だ。
なんか良い解決策は無いかしら?

カテゴリー
2008 Develop

illustratorとfireworksとflashDevelop

081125.jpgのアイコンを並べて配置すると押し間違えが多発する。アイコンのデティールは選択時の判別において、あまり重要で無いということを身をもって体感できる。これにpopFileやのアイコンなんか並べたら更に分かりにく使いにくくできそうだ。

カテゴリー
Develop

progression検証 #20 HistoryManagerの拡張

今回は正確に言うと検証ではなく、改造です・・・。
今後の等を考えるとが取れなくなるのでお勧めしません。実装される方は一応自己責任でお願いします。
ドキュメントには掲載されていないのですが、
jp..core.managers.HistoryManager
という履歴をするがあります。基本的にはの「戻る」「進む」ボタンに対応してシーンを遷移させる働きをしています。これを使用しているクラスとしては
jp.progression.core.managers.KeyboardManager
jp.progression.core.managers.SceneManager
jp.progression.core.ui.CastObjectContextMenu

の3つがあります。コンテキストとかは標準的に表に出てくるので使っている人も多いと思います。
で、これと同じ働きをする「back」「next」ボタンを内で実装する場合

という感じになります。
ただ履歴とその中における現在の位置の関係が分からないため、これ以上戻れない、進めない状態になったときにボタンをしたりすることができません。(その口を見つけられていないだけかもしれないけど)
つまりHistoryManager._positionとHistoryManager._histories.lengthの関係をチェックして、フロントのボタンの制御を行える口を用意したいなと・・。
ただposition、histories共にprivate static属性のためextendsもできず・・・ということでHistoryManagerに2つメソッドを追加してしまいました。

カテゴリー
Develop

progression検証 #18 CastImageLoaderの読み込み強制終了 CastImageLoader.close編

apeirophobia: Loaderの読み込み強制終了 Loader.close編apeirophobia: Loaderの読み込み強制終了 Loader.unload編の続き。Progression3でやるとどうなるか?の検証。
主要なコードは以下の通り。本当はもっとスマートなき方がCastImageLoaderにはありますが、敢えてここはcontentsLoaderInfoと比較するためにこの記述の仕方で・・。
CODE:1

で、一点注意点としてはCastEventは”UNLOAD”を持たないので、その部分だけは.UNLOADを使用します。あ、あとcontentLoaderInfoではなく直接CastImageLoaderを監視します。
プレビュー/ダウンロードシミュレートでの結果は

1:読み込み中にclose実行>読み込みは中断されず、COMPLETEイベント発生。ただし_loaderは表示されない。
2:読み込み前にclose実行>特になし
3:読み込み後にclose実行>_loader消去
4:読み込み中にclose実行後、再度読み込み>2回目の読み込みCOMPLETEイベントが発生するが、_loaderが表示されない。
5:読み込み完了後にclose実行後、再度読み込み>問題なく表示
6:読み込み後、再度読み込み中にclose実行>unloadが無視され、COMPLETE発生後表示されてしまう。

という感じに。読み込みは中断されずCOMPLETEイベントは発生してしまいますが、表示されることはありません。
ただし4、5、6あたりが挙動が不審なところで、読み込み中にunloadを実行する、もしくは一度unlaod無しでCOMPLETEしてしまうとcontents(DisplayObject)の制御が利かなくなるようです。(ExLoader、ExImageLoader、CastImageLoaderの中を見てみましたが、ちょっと原因良く分からなかった)
HTTP経由での実行結果は

1:読み込み中にclose実行>読み込み中断。
2:読み込み前にclose実行>特に問題なし
3:読み込み後にclose実行>_loader消去
4:読み込み中にclose実行後、再度読み込み>問題なし
5:読み込み完了後にclose実行後、再度読み込み>問題なく表示
6:読み込み後、再度読み込み中にclose実行>問題なし

という結果になりました。プレビュー環境でおかしかった4、5、6辺りはHTTP経由では問題ないようです。
で、話はちょっと横にそれますが、contentsLoaderInfoのイベントとのミングですが、普通にLoadingした場合

CastImageLoader::ロード開始
contentLoaderInfo::ロード開始
CastImageLoader::ロード完了
contentLoaderInfo::ロード完了

というようにCastImageLoaderのイベントのほうが先に実行されています。ステキです。
では続いて、CastImageLoaderに最適と思われる記述の仕方をしてみます。

カテゴリー
Develop 未分類

Loaderの読み込み強制終了 Loader.unload編

前回(apeirophobia: Loaderの読み込み強制終了 Loader.close編)の続き。
とりあえず主要なコードは以下のような感じ。
CODE:1

これをプレビュー/ダウンロードシミュレートですると

1:読み込み中にunload実行>読み込み止らず、読み込み完了して表示
2:読み込み了後にunload実行>表示されていた_loaderが消去
3:読み込み前にunload実行>何も起きない。

といった感じ。closeの時のように例外throwは無い。ということでhttp経由で検証。

1:読み込み中にunload実行>読み込み止らず、読み込み完了して表示
2:読み込み終了後にunload実行>表示されていた_loaderが消去
3:読み込み前にunload実行>何もおきない

という感じで、どうしようもない感じに終わりましたw
つまりunloadは読み込みが完了したcontentLoaderInfoに対してのみ有効なようです。
ということでcloseと組み合わせて使うのが正解のようですが、なんにしてもプレビュー環境で動作が確認できないのでその辺が面倒です。はぃ。
じゃ次はprogression3のCastImageLoader等で同様の処理を行う場合にどするか?(多分ほとんど一緒だとは思いますが)検証することにします。

カテゴリー
Develop

Loaderの読み込み強制終了 Loader.close編

外部のローディング途中で他の処理やシーンに遷移したい場合等、ローディングを任意に中止する部分で現在はまり中ということで検証を時系列的にメモ。
“Loader”クラスには”close”と”unload”という似たようなメソッドが2つほどある。
closeは

Loader インスタンスに対して現在進行中の load() メソッドの処理をキャンセルします。

一方unloadは

load() メソッドを使用してロードされた、この Loader の子を削除します。関連したLoaderInfo オブジェクトの property は にリセットされます。他のオブジェクトが参照している可能性があるため、子は必ずしも破棄されるとは限りません。ただし、Loader オブジェクトの子ではなくなります。

と定義されている。
とりあえず”close”から検証してみる。
CODE:1

既にこの時点でCLOSEイベントを取得する口が見つからない(汗 EVENT.CLOSEは”Socket”,”XMLSocket”だけにしか用意されていない。つまり発動したとしても結果を拾えないというな感じになっている。

カテゴリー
Develop

progression検証 #16 CastDocumentでの先読み処理におけるProgression.sync=trueの設定

機能の一つに

sync : Boolean
上でコンテンツをしている場合に、URL と Progression インスタンスのシーンを同期させるかどうかを取得または設定します。 同一コンテンツ上で有効化できる Progression インスタンスは 1 つのみであり、複数に対して有効化を試みた場合、最後に有効化された Progression インスタンス以外の プロパティは自動的に false に設定されます。

があるわけですが、”Index(CastDocument)”内でコマンドを使って外部ファイルのローディング処理等をしつつ、”sync=true”にしていると、コマンド処理待ちをすっ飛ばして自動的にfirstSceneIdシーンに遷移してしまいます。(prog.goto( prog.firstSceneId );”を記述していない場合、プレビュー環境では遷移しないのですがブラウザ上でみると遷移しちゃう)
各シーン毎に必要なものを読み込む様な形であればないのですが、先読みデータ前提で各シーンの設定していると(例えば外部をbitmapdataとして保持して、そこから呼び出したり)、読み込み前のためにになってしまってエラーが出てきます。
でわどするか?っつーと”prog.sync = false;”の設定をコマンドの中にいれて設定を同期させてしまいます。つまり先読み処理がわった後、且つ最初のシーンへの移動の間で設定する。こんな感じ
CODE-1

これで多分大丈夫。
多分・・。

カテゴリー
Develop 未分類

Progressionのテンプレートファイル for FlashDevelop

minomix blog » ProgressionのテンプレートファイルをFlashDevelopに組み込んでみた
これはでちゅ。