なんだかまさに付箋状態になりつつある”Progression3″カテゴリ・・・。
ということでもう一つ追加。
外部からイメージを読み込むのに使うクラス”CastImageLoader”。これは”flash.display.Loader”のサブクラスなので”LoadChild(←flash.events.EventDispatcher)”と違ってコマンドで処理待ちしてくれない。
これをコマンドで監視できるようにするのはどーすればよいか?というお話。
“Command”クラスを継承して”CastEvent.CAST_LOAD_COMPLETE”でイベントを排出したり、”executeComplete();”したりすればなんかいけそうな気もするが、ちょっとそれは冗長な気がする。
“Func”クラスを用いて、ごにょごにょしたりしてコマンド監視下に置けないかしら?
“after”メソッドの中でゴニャゴニャしてもいけそうな気もするが、今頭がまわらないので忘れないようにメモ。
タグ: flash
この問題(apeirophobia: Progressionの中でPV3D)がまだクリアになっていないのだけど、ちょっと先に進みます。今回は外部データの読み込みを試してみます。
一般的に外部データとして想定されるものはxml,json,jpg,swf等があります。as3になってバイナリも読み込めるのですがそれはまた別の話で。
最初に至極まっとうにXMLでやってみます。IndexScene.asの_onLoadの中に組み込んでみます。
#code-1
こんな感じ。
次にcommandを使ってみる。
続いてSceneに色々貼り付けるのに”jp.progression.casts”系を使用してみます。
まずは”AboutScene”。前回で作成した適当なMovieClip”div_scene1″とJPG画像をcast系に変更。bmは以前は”name”を指定していたものを”id”に変更。(一応nameもありますが、getInstanceByIdを検証するためidにしておく)
で、とりあえずコンパイルしてみると”AboutScene”を表示させるタイミングでエラーが発生。
TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。
さてこれは何が原因かいな?ということで、考えると”as CastMovieClip”はちと強引だったかしら?ということで、ライブラリの”div_scene1″のリンケージ設定で、基本クラスを”jp.progression.casts.CastMovieClip”に設定。
これでOK。
さて続いて”AboutScene”で生成されて、”ContactScene”で削除される画像のオブジェクトの処理をするために”ContactScene”の中を設定。”_onInit”の中で
としてコンパイル。
“AboutScne”を表示後、”ContactScene”を表示すると、きちんとbm(id=face)が削除される。
ここまではOK。
ただし、その後他のシーンに遷移してまた”ContactScene”に戻ったり、いきなり”ContactScene”に入ったり、用はCastBitmapオブジェクトが存在しない状態だとエラーが出る。
ArgumentError: Error #2025: 指定した DisplayObject は呼び出し元の子でなければなりません。
“if (bm)”では駄目っぽい。
ちと
で何が戻ってきているのか?みてみると
[CastBitmap id=”face” name=”instance26″ group=”null”]
な感じ。addChildされているかどうか?は戻り値には関係ないっぽい。
ちなみに”getChildByName”だとremoveChildしたObjectは”null”で戻ってくる。
なので、addChildされているか否かを判定する必要がある・・。
さて・・・。ちょっとひとまずここで休憩。
ヨロヨロ進行中。
さて、シーンの中に普通にMovieClipやら、イメージやらを貼り付けてみる。
SceneObjectは[SceneObject Inheritance →EventIntegrator Inheritance →flash.events.EventDispatcher]という継承なので、DisplayObjectでは無い。ここは一応注意。じゃあDisplayObjectは具体的にシーンごとに分離されているのか?と言われると多分違う。恐らくドキュメントルートにSceneに関係なく配置されているのだと思うが、Sceneをまたいで存在するDisplayObjectにどーアクセスするのか?はまだ分からない。
少し話しがそれたので、元に戻す。
ガイドに書いてあるaddCommandの形でとりあえずMovieClipとBitmapDataを貼り付けてみる。
ライブラリでMovieClipを”div_scene1″、JPG画像を”bm_face”でクラス定義。
Sceneのコンストラクタで
こんな形で生成。
んでもって”_onInit”で
こんな感じでキャスト登録。
同様に”_onGoto”できちんと”RemoveChild”。
で、OK。
本当は用意されているjp.progression.casts Package – Progression 3.0 – API Referenceこの辺のキャスト系を使わないと、あまりAddCommandの中に入れている意味は無いのだと思うけど、まず整理の為に標準のやり方でやってみる。
次にaddCommandの中で定義しないで、直接貼ってみる。
progression検証 #1
Ver.2で途中まで手を付けたままで、なかなか先に進めずにいたprogression。
改めてVer.3で最初からやり直してみる。
同じタイミングでtrick7さんもスタートしている。trick7.com blog: やっと Progression3 をさわりはじめたメモ 多分こちらの方がヨタヨタ展開の予感。
まずprogression.jp | ドキュメント | クラス制作ガイドで一通り実装。色々基本的な項目がパッケージ化されていて便利。元のAS3を忘れそうで恐ろしいw
この時点での感想・疑問点としては
- シーンが遷移中にボタンが自動的にKILLされている。これは便利な面もあれば不便な面もある。任意で解除できるのかは追って調べる。(ただ解除したらコマンド系非同期処理になにか破綻が出てくるかもしれない)
- flashVarsにJSONを良く使用するのでindex.htmlにJSONを組み込みたいのだけど、テンプレートをどう修正すれば良いのか良く分からない(SWCの中?)。これも追って調べる。
- データ構造がまだきちんと分かっていない。Indexの中のnew Progressionの第3引数でrootClass(ガイドではindexScene)を定義しているが、ここをnullにした場合どういう状態になるのか?(暗黙的にindex?)
- IndexSceneの中で他のシーン(About,Contact)を生成している理由は?情報構造的にindexSceneの子供という考え方?
- Sceneに複数のcastを割り振りできなくなった?(多分できるけど)
勉強会に行きたいのだけど、いつも都合が合わず欠席している。
次回こそなんとしても行きたい。
FLASH OOP for ActionScript 3.0
7月頭に発売開始だそうです。
ちなみに前の奴買っていますが、ザラザラって読んで終了してしまった・・・。
今回購入したら完読したいと思います。
今回の帯は誰のコメントがつくのだろうか?
バージョンアップしたら設定が全部吹っ飛んだ・・・汗
ちなみにフォントの設定がTools/Program settings/Mainから出来るようになって喜んだのだけど、Console FontとDefault Fontだけということで、なんかエディタ部分のフォントは従来どおり”C:\Documents and Settings\User\Local Settings\Application Data\FlashDevelop\Settings\ScintillaNET.xml”で行うかんじらしい。まぁ良いけど。
何が具体的に変わったのかまだ良く分からないですが、Global Classパスを色々設定している人は先にそこらへんメモしてからバージョンアップしてください。(一応プロジェクトレベルで設定されているクラスパスはそのまま継承されています)