Progressionでシーンが無い場合のエラー対策を考える

  • 2008 年 12月 9 日
  • kosuke

このブログにProgressionを使ったSWFを貼付けた時に気づいたことがあります。

それはSWFが表示されないこと。結構ハマったのでエントリー。原因は存在しないシーンへの遷移に起因していました。


まず、普通に以下のリンクを試していただきたい。

その1
1) http://nipx.jp/2px/lab/progression/a/index.html
2) http://nipx.jp/2px/lab/progression/a/index.html#/top
3) http://nipx.jp/2px/lab/progression/a/index.html#/top/
4) http://nipx.jp/2px/lab/progression/a/index.html#top

ここで表示しているSWFは、ルートシーンにindexSceneだけを持つProgressionを使ったSWFです。正しく動くとindexSceneのinitで「IndexSceneを表示しています」と表示されます。

1は表示されるけれど、それ以外は表示されない。

理由は、2はtopっていうシーンを設定していないからで、3と4はシーンの書式が間違っているからです。
ブログに設置した時は、まずここでつまずいた。
このブログは、トップページから続きを読むリンクをたどると、#extendedっていう指定が付いてくるのですが、Progressionから書き出したSWFがこの#extendedを処理しようとするのだけれど、上記の結果のように正しくindexSceneが表示されなかったのです。しかも、SWFAddressなど、jsをhtmlで読み込んでいない場合もです。

これはページの一部にflashを使って、ページ内リンクがある場合、問題になりそうな気もします。が、今はそんなこと考えたくないので無視。
だったらとAPIリファレンスを調べてみると、ProgressionクラスにあるprocessErrorってイベント(移動先シーンが無かったときに送出される)を発見。これを処理すればいいのだろうとやってみる。

 
その2
1) http://nipx.jp/2px/lab/progression/b/index.html
2) http://nipx.jp/2px/lab/progression/b/index.html#/top
3) http://nipx.jp/2px/lab/progression/b/index.html#/top/
4) http://nipx.jp/2px/lab/progression/b/index.html#top

2はエラー表示されるけれど、3と4は已然何も表示されない。
これは別のところでエラーが起きていると思って、今度はtry..catch..finallyステートメントでかこってみる。

まずは、Progressionのインスタンスを作るところに設置。

try{
	prog = new Progression( "index", stage, IndexScene );
}
catch(e:Error){
	...
}

その3
1) http://nipx.jp/2px/lab/progression/c/index.html
2) http://nipx.jp/2px/lab/progression/c/index.html#/top
3) http://nipx.jp/2px/lab/progression/c/index.html#/top/
4) http://nipx.jp/2px/lab/progression/c/index.html#top

3もエラー表示されるようになったけれど、4はまだ表示されない…。
ところで、この#9007エラーを見てErrorMessageConstantsを覗いてみたのですが、膨大な数のエラーメッセージが用意されていて驚きます。エラーメッセージだけでもProgressionの完成度の高さをよく表していると思う。
で、あと、怪しいのはgotoのところだったので、ここもtry〜でエラーをキャッチしてみると…。

try{
	prog.goto( prog.firstSceneId );
}
catch(e:Error){
	...
}

 
その4
1) http://nipx.jp/2px/lab/progression/d/index.html
2) http://nipx.jp/2px/lab/progression/d/index.html#/top
3) http://nipx.jp/2px/lab/progression/d/index.html#/top/
4) http://nipx.jp/2px/lab/progression/d/index.html#top

これで4も解決。で、今回はここまでしか調べてないのでだけれど、インスタンスを作るところとgotoのところでエラーの種類が違っていて、インスタンスを作るところで転んだ場合、Progressionインスタンスが出来ていないからエラー表示のSceneObjectに移動できなかった。エラーに対処してから新しくインスタンスを作るとか工夫すればもっとスマートに出来るのだろうと思います。とりあえず、ここまでの対応でも何かしら表示する対応は出来そう。

“Progressionでシーンが無い場合のエラー対策を考える” に 2 件のコメント

  1. Gravatar Icon Saqoosha より:

    ぼくもこのあいだその問題に当たったから解決法を書いといたよ!
    http://forum.progression.jp/index.php?topic=27.0

  2. Gravatar Icon KOSUKE より:

    さくーしゃさん。
    はじめまして。さすがです。お見事。
    あー、フォーラム読めば悩まずに済んだんだー。

  3. コメントをどうぞ