Progressionでmanagerがnullになるタイミングがある
2010/01/06 12:34
はじめに
Progressionで意図しないタイミングでmanagerがnullになります。
基礎中の基礎みたいなレベルなので、僕の組み方が悪いはずなのですが、どこが悪いのか見つけられません。
ということで賢い人誰か教えてくれたらいいなエントリ。
ちなみに環境はこんなもんです。Progressionのバージョン以外あんまり関係ないと思いますけど。
- Adobe Flash CS4
- FlashPlayer10
- Progression4.0.1
サンプル
サンプルを開く
traceがわりにTextFieldに出力しています。
2度目の”[ ChildPage1 ] atCastAdded”の下の行のmanagerの出力が
“manager : null”になってしまっています。
ソース
ソースをダウンロード
ソースはサンプルとして極力単純化したつもりです。
省略してますが、かいつまむと全体のソースはこんな感じです。
2秒おきにChildScene1→ChildScene2と移動し、各ChildSceneではChildPageをAddしたりRemoveしたりしてるだけなつもりです。
IndexScene.as
public class IndexScene extends SceneObject
{
private var _child1:ChildScene1;
private var _child2:ChildScene2;
private var _tf:CastTextField;
public function IndexScene()
{
_tf = new CastTextField( { id:"output", x:600, width:200, height:600 } );
_child1 = new ChildScene1("child1");
_child2 = new ChildScene2("child2");
this.addScene(_child1);
this.addScene(_child2);
}
protected override function atSceneLoad():void
{
addCommand(
new AddChild(container, _tf)
);
}
protected override function atSceneInit():void
{
_tf.text += "\n" + "[ IndexScene ] atSceneInit";
new SerialList(null,
2,
new Goto(_child1.sceneId),
2,
new Goto(_child2.sceneId),
2,
new Goto(_child1.sceneId),
2,
new Goto(_child2.sceneId)
).execute();
}
}
ChildScene1.as (ChildScene2もクラス名以外は同じ)
public class ChildScene1 extends SceneObject
{
private var _page:ChildPage1;
private var _tf:CastTextField;
public function ChildScene1( name:String = null, initObject:Object = null )
{
_page = new ChildPage1();
_tf = getInstanceById("output") as CastTextField;
}
protected override function atSceneInit():void
{
_tf.text += "\n" + "[ ChildScene1 ] atSceneInit";
_tf.text += "\n" + "manager : " + manager;
addCommand(
new AddChild(container, _page)
);
}
protected override function atSceneGoto():void
{
_tf.text += "\n" + "[ ChildScene1 ] atSceneGoto";
addCommand(
new RemoveChild(container, _page)
);
}
}
ChildPage1.as (ChildPage2もクラス名以外は同じ)
public class ChildPage1 extends CastSprite
{
private var _tf:CastTextField;
public function ChildPage1( initObject:Object = null )
{
_tf = getInstanceById("output") as CastTextField;
}
protected override function atCastAdded():void
{
_tf.text += "\n" + "[ ChildPage1 ] atCastAdded";
_tf.text += "\n" + "manager : " + manager;
}
}
大体一般的なProgressionのソースです。と僕は思い込んでます。
で、次にサンプルのtraceを見てみます。コメントをつけました。
[ IndexScene ] atSceneInit //IndexSceneに来た [ ChildScene1 ] atSceneInit //ChildScene1に来た manager : [Progression id="index"] //managerの参照あり [ ChildPage1 ] atCastAdded //ChildPage1がAddChildされた manager : [Progression id="index"] //managerの参照あり [ ChildScene1 ] atSceneGoto //ChildScene1から離脱、ChildScene2に移動開始 [ ChildScene2 ] atSceneInit //ChildScene1に来た manager : [Progression id="index"] //managerの参照あり [ ChildPage2 ] atCastAdded //ChildPage2がAddChildされた manager : [Progression id="index"] //managerの参照あり [ ChildScene2 ] atSceneGoto //ChildScene2から離脱、ChildScene1に移動開始 [ ChildScene1 ] atSceneInit //ChildScene1に来た manager : [Progression id="index"] //managerの参照あり [ ChildPage1 ] atCastAdded //ChildPage1がAddChildされた manager : null //★★★managerの参照なし★★★ [ ChildScene1 ] atSceneGoto //ChildScene1から離脱、ChildScene2に移動開始 [ ChildScene2 ] atSceneInit //ChildScene1に来た manager : [Progression id="index"] //managerの参照あり [ ChildPage2 ] atCastAdded //ChildPage2がAddChildされた manager : [Progression id="index"] //managerの参照なし
ChildPage1.atCastAdded()内で参照したmanagerがnullです。
1回目は同じ箇所でちゃんととれています。
また、直前のChildScene1.atSceneInit()内でもとれています。
でも、ChildPage1.atCastAdded()内で参照したmanagerがnullです。
他にも以下のテストをしました。
- もう一回り繰り返し、1→2→1→2→1→2にすると、2回目と3回目の同様の箇所で同様の現象が起きます。
- シーン遷移の順を2→1→2→1にすると、今度は2回目のChildScene2の同様の箇所で同様の現象が起きます。
- ChildPage3とかを作って、1→2→3→1→2→3にすると、やはり2回目のChildScene1の同様の箇所で同様の現象が起きます。
ものすごい基本的なレベルなので、きっと組み方が誤っていると思われますが、ちっともわからないのでエントリにしてみました。これぞ神待ちサイト。
追記
賢い人その①@soundkitchenさんが教えてくれました。バグだそうで、同じ現象に出会ったそうです。
賢い人その②(というか本家)@niumさんが教えてくれました。次のリリースではなおるそうです。やったね ![]()
Leave a Reply