Results tagged “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

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

Feb 062009

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

以前apeirophobia: 特定の文字だけを埋め込んだフォントのランタイム共有方法(AS 2.0)というエントリーを書いたけど、今度はAS3版。既出のリソースとしては
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の設定も絡んできて、ちょっと原因の切り分けがややこしくなっているので、検証してみました。

なんか良く分からない部分もあるのですが、とりあえず忘れないようにダラダラ書いておきます。

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

Feb 032009

泣きっ面に蜂

AS3になって丁寧にエラーが出てくるようになったが、若干過剰に感じる時もある。
今日は1行コードを追加したら1300行近くのエラーが排出された。
エラーを読むだけでエラーが発生しそうな勢いである。

倍返しどころの騒ぎではない。

死者に鞭打つ
の方が適当だったろうか?

Jan 292009

LoaderContext.securityDomain

サーバ上でのクロスドメインでのSWF連携はこれで出来るんだけど、ローカルからサーバ上のSWFを参照するとこれが引っかかる。getDefinitionとかregisterClassAliasがはじかれちゃうなぁ・・・。

とりあえずSecurity.sandboxType == Security.REMOTEの場合だけサーバを参照するようにして対応したけど、そーゆーものなのかしら??クロスドメイン系はいろんなやり方がある上に、ドキュメントも曖昧なので良く分からないなぁ。


Jan 182009

baseが上手く適応されない件(Progression3.1.2)

先日Progressionがバージョンアップした(blog.progression.jp» ブログアーカイブ » [リリース] Progression 3.1.2 をリリースしました)それに伴い、SWFObjectが2にバージョンアップ。それに伴いJS関係が色々変更。
今進めている案件はJSONを組み込んだりとJSを結構弄ってしまっていたので、Class関係だけを更新してJSは前のままにしたら、SWFAddressが動作しなくなってしまった(汗

ということでJS系の更新を試みたのだけど、外部ファイル参照起点設定のbase="."が上手く認識されないのか、起点がindex.htmlになってしまっているっぽく、外部ファイルの参照ができなくなってしまった。

ということでバージョンアップの手順を実際にやりながら書いていく。
(検証しながら色々やっていると自分でどこまで潰したか分からなくなるので・・・)

まず、オデの良く使うフォルダ構造は

/root
 index.html
 /swf
  preloader.swf
  index.swf
 /data
  hoge.xml

っつーような構造で、参照起点をindex.htmlではなく、/swfにする。これはまぁhtmlから読み込んだ際にも、Flashのパブリックプレビューからでも同じように外部ファイルにアクセスして動作するようにしたいということです。(じゃないと正直開発できない。)(index.htmlと同じ階層にSWFを配置すれば問題は無いのだけど、ルートに色々ファイルがあるのは個人的に好みではないというだけ・・)

じゃあまずFlash単体で動作するようにしてみようちうことで、IndexSceneの中でTopちうCastSprite拡張のクラスをAddChildして、その中で外部XML(hoge.xml)を読み込んでみる。

ま、特に悩むことはない。簡単に書く

var url:URLRequest = new URLRequest("../xml/hoge.xml");
net = new LoadURL(url);
net.after(_onLoadComp);
net.error(function(e) {
	txf.text += e;
});
addCommand(
	net
	);

index.flaをパブリッシュプレビューすれば問題なく読み込める。

次にswf/preloader.swfswf/index.swfを読み込み、その中からxml/hoge.xmlを読み込んでみる。いや、別に特別なことは何も無い、Preloader.asのコンストラクタは

public function Preloader() {
	// 読み込みたい SWF ファイルの URL を設定します。
	url = "index.swf";
	
	// SWF ファイルの URL の起点を、自身の SWF ファイルが存在するフォルダにするかどうかを指定します。
	useSWFBasePath = false;
}

ですが、swf基点からの読み込みなので、特に変更せずとも読み込める。
(ただuseSWFBasePath ってのがイマイチどのswfまで継承されるのか良くわからないけど・・)

ということで、一度HTMLを経由して表示してみる。

Continue reading baseが上手く適応されない件(Progression3.1.2).

Jan 152009

MovieClip.addFrameScript

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

// 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).だった。これだけで長い間放置していた・・・汗

ちなみに複数フレームに一気に追加する場合には

addFrameScript(5, aho,6,aho2);

削除する場合には

addFrameScript(5, null);

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

addFrameScript(9,output,false,false);

というような記述がありますが、これは動作確認取れませんでした。


ちなみにProgressionの"ExMovieClip"クラスではループ再生制御のためにコンストラクタで

addFrameScript( totalFrames - 1, _complete );

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


Ref.FlashGuru Consulting - Undocumented Actionscript 3

Dec 052008

毎回行き詰るのは

・extends Arrayのクラス内要素の厳密な型指定
>結局Object化して、配列演算子をブロックする方向に・・汗

・変数のoverride(クラス違い)
>結局子供クラスで定義して、共用メソッドが上にこぼれてくる。

・Static系methodの継承問題
>シングルトン作って、ワンクッション。

いつもここで四苦八苦している気がする。
金なし、暇なし、進化なし。

Dec 022008

ニャホアーーー

Inheritance -- Flash CS3

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

Nov 292008

Arrayの拡張で配列演算子でのアクセスを防止できないか?

Proxyとか色々試してみたけれど、駄目だった。
Adobe Flex 3 ヘルプ

うーむ・・・・・。配列演算子を使用しないという前提条件で、代替メソッドを用意するしかないか?
なんかイラッとするなぁ・・。

Nov 252008

SharedObjectの一時変数

AS2の頃は

To create private values for a shared object--values that are available only to the client instance while the object is in use and are not stored with the object when it is closed--create properties that are not named data to store them, as shown in the following example:

ということで

var my_so:SharedObject = SharedObject.getLocal("superfoo");
my_so.favoriteColor = "blue";
my_so.favoriteNightClub = "The Bluenote Tavern";
my_so.favoriteSong = "My World is Blue";
for (var prop in my_so) {
    trace(prop+": "+my_so[prop]);
}
ということができたのだけど、AS3からはdynamicじゃなくなっちゃってできなくなっちゃった。

まぁ何がやりたいかっつーとJSのcookieのexpireみたいなことをやりたいんだよね。ブラウザのウインドウが閉じられた瞬間に破棄する・・みたいな。そういうイベントがあるのかもしれないけど、displayObject系では今のところ無理そうな悪寒。次回アクセスの際にタイムスタンプから継承するかどうか?っつーのはできそうだけど、美しくないなぁ・・。

Nov 222008

progression検証 #20 HistoryManagerの拡張

今回は正確に言うと検証ではなく、改造です・・・。
今後のバージョンアップ等を考えると同期が取れなくなるのでお勧めしません。実装される方は一応自己責任でお願いします。

ドキュメントには掲載されていないのですが、
jp.progression.core.managers.HistoryManager
という履歴を管理するクラスがあります。基本的にはブラウザの「戻る」「進む」ボタンに対応してシーンを遷移させる働きをしています。これを使用しているクラスとしては
jp.progression.core.managers.KeyboardManager
jp.progression.core.managers.SceneManager
jp.progression.core.ui.CastObjectContextMenu

の3つがあります。コンテキストとかは標準的に表に出てくるので使っている人も多いと思います。

で、これと同じ働きをする「back」「next」ボタンをFlash内で実装する場合

HistoryManager.back();//戻る
HistoryManager.forward();//進む
という感じになります。

ただ履歴とその中における現在の位置の関係が分からないため、これ以上戻れない、進めない状態になったときにボタンを殺したりすることができません。(その口を見つけられていないだけかもしれないけど)

つまりHistoryManager._positionとHistoryManager._histories.lengthの関係をチェックして、フロントのボタンの制御を行える口を用意したいなと・・。
ただposition、histories共にprivate static属性のためextendsもできず・・・ということでHistoryManagerに2つメソッドを追加してしまいました。

Continue reading progression検証 #20 HistoryManagerの拡張.

Nov 172008

progression検証 #19 progression.jsを使用した際のSWFForceSizeの挙動不審

ちとはまったのでメモ。

swfの最小表示領域を確保したい場合にSWFForceSizeを使用するのですが、それがIEで上手く動作しなくてフガフガしてた。現象としては
・設定ウインドウサイズになってもスクロールバーが表示されない
・最初に小さいウインドウで表示させた後に、ウインドウを拡大してもFlashサイズが変わらない。
・縦サイズのみスクロールバーが表示され、横方向は表示されない。
等、上手く動作するときもあれば、上記のようなバラバラの挙動を示していた。

SWFObject2.0でSWFForceSizeを使う | FlashやWebにまつわるいろいろなことが原因かな?とも思ったのだけど、ちと違う。そもそもSWFForceSize.onResizeDivが発動していない。

Progression.jsの中を確認してみると"/contents/objects/version.swf"を用いてバージョンチェックを行って、progression.onLoadを実行。その中でswfObject,SWFForceSizeを定義するってのがデフォルトの流れ。

SWFForceSize内部では定義時に

this.addWindowEvent( 'onload', this, this.onLoadDiv );

をセットして初期化を行うようにしている。

んがprogression.onLoadの発動タイミングによって、document.onload後にSWFForceSizeが定義される可能性があり、そこが多分不具合の原因なのではないだろうか?と思う。(違ったらごめん)

単純に考えて"prog.onLoad"の一番最後にdocument.onLoad()を強制的にCALLしてやれば上手く動くかな?と思ったのだけど、横方向のスクロール制御が不能になったりしたので断念。

外部JSの読み込みのタイミング等に依存しているのか上手く動いたり動かなかったりという不安定な挙動をしめすので一度Progression.jsをはずした形で実装を進めてみることにする。

落ち着いたらも少し調べてみる。

Nov 162008

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

apeirophobia: Loaderの読み込み強制終了 Loader.close編apeirophobia: Loaderの読み込み強制終了 Loader.unload編の続き。Progression3でやるとどうなるか?の検証。

主要なコードは以下の通り。本当はもっとスマートな書き方がCastImageLoaderにはありますが、敢えてここはcontentsLoaderInfoと比較するためにこの記述の仕方で・・。
CODE:1

_loader = new CastImageLoader();
//CastImageLoaderイベント
_loader.addEventListener(CastEvent.CAST_LOAD_COMPLETE, _loaded_Loader);
_loader.addEventListener(CastEvent.CAST_LOAD_START, function() { trace("CastImageLoader::ロード開始");_output.text = "CAST_LOAD_START"} );
_loader.addEventListener(Event.UNLOAD, function() { trace("CastImageLoader::アンロードされました"); _output.text = "CAST_REMOVED" } );
//contentLoaderInfoイベント
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function() { trace("contentLoaderInfo::ロード完了"); } );
_loader.contentLoaderInfo.addEventListener(Event.OPEN, function() { trace("contentLoaderInfo::ロード開始"); );
_loader.contentLoaderInfo.addEventListener(Event.UNLOAD, function() { trace("contentLoaderInfo::アンロードされました"); } );
・・・
_bt_cancel.onCastMouseDown = function()
{
	trace("CLOSE実行");
	if (_loader.contentLoaderInfo && _loader.contentLoaderInfo.bytesLoaded < _loader.contentLoaderInfo.bytesTotal)
	{
		_loader.close();
	}
	_loader.unload();
}
・・・
private function _loaded_Loader(e:Event):void
{
	trace("CastImageLoader::ロード完了");
	addChildAt(_loader,0);
}
で、一点注意点としてはCastEventは"UNLOAD"イベントを持たないので、その部分だけはEvent.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に最適と思われる記述の仕方をしてみます。

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

Nov 162008

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

前回(apeirophobia: Loaderの読み込み強制終了 Loader.close編)の続き。

とりあえず主要なコードは以下のような感じ。
CODE:1

_loader = new Loader();
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, _loaded_Loader);
_loader.contentLoaderInfo.addEventListener(Event.OPEN, function() { trace("ロード開始");_output.text = "START"} );
_loader.contentLoaderInfo.addEventListener(Event.UNLOAD, function() { trace("アンロードされました");_output.text = "UNLOADED" } );
・・・
_bt_cancel.onCastMouseDown = function()
{
	_loader.unload();
}
これをプレビュー/ダウンロードシミュレートで実行すると
1:読み込み中にunload実行>読み込み止らず、読み込み完了して表示
2:読み込み終了後にunload実行>表示されていた_loaderが消去
3:読み込み前にunload実行>何も起きない。
といった感じ。closeの時のように例外throwは無い。ということでhttp経由で検証。
1:読み込み中にunload実行>読み込み止らず、読み込み完了して表示
2:読み込み終了後にunload実行>表示されていた_loaderが消去
3:読み込み前にunload実行>何もおきない
という感じで、どうしようもない感じに終わりましたw

つまりunloadは読み込みが完了したcontentLoaderInfoに対してのみ有効なようです。
ということでcloseと組み合わせて使うのが正解のようですが、なんにしてもプレビュー環境で動作が確認できないのでその辺が面倒です。はぃ。

じゃ次はprogression3のCastImageLoader等で同様の処理を行う場合にどするか?(多分ほとんど一緒だとは思いますが)検証することにします。

Nov 162008

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

外部イメージのローディング途中で他の処理やシーンに遷移したい場合等、ローディングを任意に中止する部分で現在はまり中ということで検証を時系列的にメモ。

"Loader"クラスには"close"と"unload"という似たようなメソッドが2つほどある。

closeは

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

一方unloadは

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

と定義されている。

とりあえず"close"から検証してみる。
CODE:1

_loader = new Loader();
_loader.contentLoaderInfo.addEventListener(Event.OPEN, function() { trace("ロード開始");} );
_loader.contentLoaderInfo.addEventListener(Event.UNLOAD, function(){trace("アンロードされました")});
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, _loaded_Loader);
・・・
//キャンセルボタン(※CastButtonを使用)
_bt_cancel.onCastMouseDown = function(){ _loader.close(); }
・・・
private function _loaded_Loader(e:Event):void
{
	trace("ロード完了");
	addChildAt(_loader,0);
}

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

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

Nov 122008

progression検証 #17 ページタイトルの設定

ProgressionはSWFAddressを内包しており、URLハッシュの制御が可能です。
また同様にSWFAddressの持っているページタイトルの制御もSceneObjectレベルで可能です。
(ただしブラウザ同期機能を有効にしておく必要があります)

やり方は簡単でSceneObjectの中で"title"を設定してやるだけで、そのシーンに移動した際にページタイトルが変更されます。
何も設定しない場合には各シーンのsceneIdが"|"区切りで表示されます。
インデックスシーンにのみ設定を行った場合には、そのタイトルの後ろにsceneIdが"|"区切りで表示されます。

注目すべき部分としてはシーンイベントの発生のタイミングではなく、"title"の変更を監視していて、titleの変更に対して随時ページタイトルを更新するという点です。

つまり"SceneObject"の中で複数のページタイトルを持たせることも可能と言うことになります。
(ただURLは別の話になるので、その行為にどれほどの意味があるのか微妙ですけど)
こんな感じ(※CastSprite等の中から)

getSceneById("hogehoge").title="ほげほげ";
titleのベース部分と、シーンタイトルを別で制御できたりするのか?はちょっとまだ良く分からないですが、まぁシーン設計の際にキチンとsceneIdが定義できていればtitleを設定しなくても問題ないかも知れません。(ただし日本語のタイトルはsceneIdに日本語を使ったことが無いので分からないですが・・・)

なんにしてもやりたいことの細かい部分まで行き届いていて、感心しきりです。

Nov 122008

Progression 3.0.7リリース

一日遅れですが
blog.progression.jp» ブログアーカイブ » [お知らせ] 緊急アップデートのお願い
だそうです。なにやらセキュリティに関する部分のアップデートということです。

このアップデートで修正される問題は、3.0.0 Beta 1 から 3.0.6 までの全てのバージョンが対象となっております。
過去、該当バージョンにて制作されたコンテンツに関しても、お手数ですがプロジェクトパネルの自動アップデート機能をご利用いただき、最新の状態となるように修正作業をお願い致します。

これはちょっと具体的な修正箇所を公開は難しそうです。
詳細は個別にメールでと言うことですが、これは大変だ・・・・汗

GNU系プロジェクトこういうときに本来の持ち味である公開性が使えなくって個人に負荷が集中してしまうのが辛いところ。やっぱなんかビジネスとして展開しないと作者さんが疲労してしまいそうで心配です。

AdobeCS4のアップデートで20万近くかかりますが、心情的にはProgressionにも20万ぐらい払いたい気持ちです。

ということでアップデートしてみます。

Nov 092008

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

Progressionの便利機能の一つに

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

があるわけですが、"Index(CastDocument)"クラス内でコマンドを使って外部ファイルのローディング処理等をしつつ、"sync=true"にしていると、コマンド処理待ちをすっ飛ばして自動的にfirstSceneIdシーンに遷移してしまいます。(prog.goto( prog.firstSceneId );"を記述していない場合、プレビュー環境では遷移しないのですがブラウザ上でみると遷移しちゃう)

各シーン毎に必要なものを読み込む様な形であれば問題ないのですが、先読みデータ前提で各シーンの設定していると(例えば外部イメージをbitmapdataとして保持して、そこから呼び出したり)、読み込み前のためにnullになってしまってエラーが出てきます。

でわどするか?っつーと"prog.sync = false;"の設定をコマンドの中にいれて設定を同期させてしまいます。つまり先読み処理が終わった後、且つ最初のシーンへの移動の間で設定する。こんな感じ
CODE-1

_list = new SerialList();
_list.addCommand(
・・・
  //先読み処理終了
  ,function() { prog.sync = true; }
  ,new Goto(prog.firstSceneId)
);
_list.execute();
これで多分大丈夫。 多分・・。

Nov 082008

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

Nov 072008

Progression日記:CastSpriteをネストさせすぎてダバダバ

このエントリーは日記です。

いやー調子にのってCastSpriteを激しく入れ子にしたものを作って、SceneObjectの"_onUnload"から"RemoveChild"で引っ掛けて、その子、孫、ひ孫へと"_onCastRemoved"で連鎖させていったらコマンドの発動順番が訳分からなくなった。これはあんまネストさせないで、深度を同じとかにして管理しないと把握できないなぁ・・・。

なんかよく分からないのは、

ICastObject オブジェクトが RemoveChild コマンド、または RemoveAllChild コマンド経由でディスプレイリストから削除された場合に送出されます。 このイベント処理の実行中には、addCommand() メソッド、及び insertCommand() メソッドによるコマンドの同期処理が行えます。

してないCastSpriteも"_onCastRemoved"を呼び出されていること・・・。
親のCastSpriteがremoveChildされたら自動的にRemoveAllChildrenが実行されたりするのだろうか?

まぁちょっと今の構造はややこしすぎて自分でも分からないのでもう一度組みなおして整理する。

  1 2 3 4  

Search and Archives

Tags