カテゴリー
Develop

progression検証 #3 シーンに色々貼り付けてみる(標準)

ヨロヨロ進行中。
さて、シーンの中に普通にMovieClipやら、やらを貼り付けてみる。
SceneObjectは[SceneObject Inheritance →EventIntegrator Inheritance →.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の中で定義しないで、直接貼ってみる。


ガイドでは

という風に記述されている。
containerはContainer – Progression 3.0 – API ReferenceにあるようにSpriteを継承しているが、”インスタンスに関連付けられている Container インスタンスを取得します。”と言うことなので、”Index.as”の”prog = new Progression( “index”, stage, IndexScene );”で定義された”IndexScene”なのかなぁ?と思ったけど、良くみてみると”private static var _container:Container = Container.progression_internal::__createInstance();”と言うことで、new Progression();した際に自動的に”CastSprite”を継承したConteinerを生成しているみたい。これProgressionと別にドキュメントルートにSpriteとか割り当てたりしたらどうなるのだろう?(基本そんな例外的なことをやるなっつー事かな?)
また話がそれた・・・。ということで

これでOK。ただしコンストラクタで記述すると、containerが未定義の状態になっているみたいでエラーになる。(SceneなのでDisplayObjectと直感的に結びつかないが、まぁ同じようなことだ)

added 2008/10/20 20:46
すいません、先に”SceneObject”は”DisplayObject”では無い見たいな事を書きましたが、”addChild”が可能みたいです。ただ”DisplayObject”の”addChild”では無く、“jp.progression.commands.AddChild”を使っているようです。この場合通常のMovieClipやらBitmapやらを使用するのが良いのか?、Cast系のObjectを使用したほうが良いのか?はこれに関しては次のエントリーで検証してみます。
added 2008/10/20 21:10
すいません、上記の2008/10/20 20:46の件は勘違いです。”SceneObject”では”addChild”できないということで・・・。(ガイドの中の”ContactPage”をみて勘違いしてしまっていました・・・汗)

で一つ先に少し書いたSceneをまたいでDisplayObjectを存在させた場合どうなるのか?を少し調べてみる。”onGoto”で”new RemoveChild(progression.container, mc1)”を削除してみると、AboutSceneを離脱しても、mc1はそのまま残っている状態。これは期待通り。
で、再度AboutSceneに入ってみる。まぁこれはインスタンス生成をコンストラクタでやっているのでaddChildだけが実行されるので別に重複登録はされない。があるとすれば各イベントの中でインスタンスを生成している場合。この場合はちゃんと”_onInit”の中でインスタンスの存在をチェックして重複生成しないようにすれば良い。
で、じゃあ他のシーンからそのDisplayObjectを操作できるのか?やってみる。
問題はスコープの継承になるので、その辺関係ないインデックスで制御してみる。
“AboutScene”の中のBitmapを

として、”ContactScene”の”_onInit”の中で

としてみる。”AboutScene”で貼り付けられて、そのまま放置される”bm”が”ContactScene”に入ると消去される。
問題なし。
さて、次はスコープを用いて削除する場合・・・。
えーーーっと・・・・汗
2008/10/20 20:28
異なるシーンで追加されたDisplayObjectを削除する方法続きです。
スマートなやり方では無いのですが・・・とりあえず・・・。
“AboutScene”コンストラクタで追加する際にBitmapにnameを定します。

で、削除するシーン”ContactScene”の”_onInit”の中に

こんな感じで記述。
これで一応削除はできます。しかしまぁ”getChildByName”が

指定された名前に一致する子表示を返します。指定された名前を持つ子表示オブジェクトが複数存在する場合、メソッドは子リストの最初のオブジェクトを返します。

って感じの仕様なので、なんか折角progressionなのに外みたいな存在はどーも嫌だなぁ・・・。なんか素敵な方法がありそうな気もしていますが、まだ見つけられていません。
まぁとりあえずSceneをまたいだDisplayObjectでも制御はできるよ!ということで・・・。

「progression検証 #3 シーンに色々貼り付けてみる(標準)」への3件の返信

あ、一応Package jp.progression.castsにはjp.progression.casts Package – Progression 3.0 – API Referenceって素敵なものがあるので、そちらでやるのが本筋かな・・?

またまた来てしまいました・・・すいません!
> Sceneをまたいで存在するDisplayObjectにどーアクセスするのか?はまだ分からない。
シーンをまたいだディスプレイオブジェクトのアクセスは、任意に参照を渡してあげる必要がありますね。
ちょっと面倒ですが、両者を分断してしまった時点でそれぞれ構造を知ることができないので、そこはサポートしていません。
> これProgressionと別にドキュメントルートにSpriteとか割り当てたりしたらどうなるのだろう?(基本そんな例外的なことをやるなっつー事かな?)
開発方針としては、どんな例外的なことをやっても大丈夫な仕様にするのが目標なので、まったく問題ありません。
Container 自体もシーンからディスプレイオブジェクトへの参照がゼロの状態だとしんどいので、汎用的なアクセス経路を用意しているだけで特に意味はありません。
> これでOK。ただしコンストラクタで記述すると、containerが未定義の状態になっているみたいでエラーになる。
ディスプレイオブジェクトの root がコンストラクタで取得できないのと同様に、インスタンス生成後、ルートシーンに addScene() されて初めて Progression インスタンスと関連付くので、コンストラクタで取得できない状態ですね。
> って感じの仕様なので、なんか折角progressionなのに管理外みたいな存在はどーも嫌だなぁ・・・。な
ここを Progression が管理しないことが自由度を担保することになると思っているので、どうしようもない部分ですね・・・。
一応、どこからでもアクセスできるようにするための getInstanceById() メソッドがあるので、厳密さを求めなければ id 指定してそれを使うのが一番手軽ですね。
厳密に管理したい場合には、シーンクラスのプロパティとして定義してしまうのもアリかもしれません。
> すいません、先に”SceneObject”は”DisplayObject”では無い見たいな事を書きましたが、”addChild”が可能みたいです。
SceneObject は DisplayObject ではない、で正解です!
addChild() はできないです!
> “jp.progression.commands.AddChild”を使っているようです。
AddChild コマンドを使用する場合でも、通常の MovieClip やら Bitmap を使っていただいてまったく問題ありません!

>またまた来てしまいました・・・すいません!
いえいえ、恐縮です。
>開発方針としては、どんな例外的なことをやっても大丈夫な仕様にするのが目標なので、まったく問題ありません。
おお、すごいです。
>ここを Progression が管理しないことが自由度を担保することになると思っているので、どうしようもない部分ですね・・・。
そですね、これを管理し始めるとSceneと別にElementみたいなクラスで管理して面倒なことになりそうですもんね・・。
>厳密に管理したい場合には、シーンクラスのプロパティとして定義してしまうのもアリかもしれません。
なるほど、そうかシーンにアクセスするの頭から抜けていました・・・。
>addChild() はできないです!
すいません、なんか混乱して間違ったことを書いてしまいました。大慌てで削除してしまいました・・。w
後でまた掲載して改めて訂正しておきます。
>AddChild コマンドを使用する場合でも、通常の MovieClip やら Bitmap を使っていただいてまったく問題ありません!
了解でっす!
間違った事書いちゃってスイマセン。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です