Progression Forum
9月 07, 2010, 11:43:35 午前 *
ようこそゲストさん。まずは、ログインするか、ユーザ登録してください。
アクティべーションメール送られて来ませんでしたか?

ユーザ名、パスワード、クッキー保持期間を入力してログインして下さい。
お知らせ:
 
   ホーム   ヘルプ 検索 ログイン 登録  
ページ: [1]
  印刷  
投稿者 スレッド: SceneLoaderで読み込んだSWFをすべて読み込みローディングに反映  (参照数 1943 回)
kiri_fla
初心者
*
投稿: 32


プロフィールを見る
« 投稿日:: 2月 07, 2010, 03:05:19 午前 »

いつもお世話になってます。 WinXp  Flash CS3 progression 4 beta 1.3

他のスレで「SceneLaoderで事前によみこませたい」(http://forum.progression.jp/index.php?topic=217.0)と同じことだと思いますが、どうしても分からずスレッドを立てました。(ルール違反でしたら申し訳ありません。)

またいくつか疑問点があります。


まずProgression4 sampleにてシーンローダーを使用したサンプルを元に単体で読み込んだ場合にローディングを設定してみようと思いサンプルでのGallerySceneLoaderにて下記のように記述しました。 *barsetはライブラリに登録してあるリンケージ名から作成したMC

protected override function atScenePreLoad():void {
         _loadscene = new LoadScene(new URLRequest("gallery.swf")),
         _loadscene.loader = this;
         _loadscene.onStart=function():void {
            _barset = new barset();
            manager.stage.addChild(_barset);
            _barset["bar"].scaleX = 0;
            };
         _loadscene.onProgress = function():void {
            _barset["bar"].scaleX = _loadscene.percent / 100;
            };
         _loadscene.onComplete = function():void {
            insertCommand(
            new DoTweener(_barset, {alpha:0,time:1} )
            );
            }
         addCommand(
         _loadscene,
         new Func(finish)
         );
         }
         
         private function finish():void{
            trace("complete");
            manager.stage.removeChild(_barset);
            _barset = null;
         }

■疑問点
間違ってる??かもしれませんが、読み込んでIndexSceneからGallerySceneに移動するとローディングが表示されますが、2回目以降にGallerySceneに移動してもローディングが表示されず。スクリプトの書き方が悪い??


上記の疑問もありますが、今度はSceneLaoderで読み込むSWFを全て事前に読み込みローディングバーに反映させたいと思ったのですが、まとめて読み込み尚且つローディングバーに反映となるとLoaderListを使用すればいいのかな??と思いIndexSceneに下記のように記述しました。

*listdata:Array=["gallery.swf","second.swf"];  //読み込むSWF

protected override function atSceneLoad():void {
         _naviSet = new NaviSet();
         _lList = new LoaderList( {
            onStart:function():void {
               _barset = new barset();
               container.addChild(_barset);
               _barset.y = stage.stageHeight / 2;
               _barset["bar"].scaleX = 0;
               },
            onProgress:function():void {
               _barset["bar"].scaleX = _lList.percent / 100;
               },
            onComplete:function():void {
               trace("読み込み完了");
               insertCommand(new DoTweener(_barset, {x:stage.stageWidth,time:0.7,transition:"easeInOutQuint" } ));
               }
            });
            addCommand(
            new Func(startLoad),
            _lList,
            new Trace("completeの後の処理"),
            new Prop(_naviSet, { x:10, y:stage.stageHeight} ),
            new AddChild(stage, _naviSet),
            function():void {
               container.removeChild(_barset);
               }
            );
         
      }
      private function startLoad():void {
         //コンテンツの数
         for (var i:int = 0; i < listdata.length; i++) {
            _lList.addCommand(addScene(new ContentSceneLoader("loader"+(i+1),{cName:listdata})));
            }
         }

以下 ContentSceneLoader.as 内での処理

public class ContentSceneLoaderextends SceneLoader{
      private var _contentname:String;
      //
      //
      public function ContentSceneLoader(name:String=null,initObject:Object=null) {
         super(name, initObject);
         _contentname = initObject.cName;
      }
      //SWFをロード
      protected override function atScenePreLoad():void {
         addCommand(
         new LoadScene(new URLRequest(_contentname),this)
         );
         }

要はLaoderListに読み込むSWFのコンテンツの数だけaddSceneをしたら・・・と実験してみましたが、読み込みはできて

return types dont match
   virt void jp.nium.core.display::IExDisplayObject/jp.nium.core.display:IExDisplayObject::setProperties()
   over flash.display::DisplayObject jp.nium.display::ExSprite/setProperties()
VerifyError: Error #1053: jp.nium.display.ExSprite の ExSprite のオーバーライドが無効です。

   at global$init()

とエラーが出てしまいました。原因が分からず困ってます。どなたかご教授願えますでしょうか?
やり方が間違っているだけだと思うのですが・・・・
« 最終編集: 2月 07, 2010, 03:12:34 午前 by kiri_fla » IP記録
northprint
管理人
常連メンバー
*****
投稿: 183



プロフィールを見る サイト
« 返信する #1 投稿日:: 2月 07, 2010, 10:50:03 午前 »

kiri_fla さま

お世話になっております。

1つ目の疑問点ですが、2回目はおそらくキャッシュから取得出きている為(既に読み込み済)、ロードバーが出てこないのではないかと思います。
new LoadScene(new URLRequest("gallery.swf") , null, null ,{cacheAsResource:false , preventCache:true})
とすればリソース管理はせずにキャッシュから読み込まず常に新しく読み込むのでロードバーが出るのではないかと思います。
(すいません未検証ですが)

2つ目のエラーですが、ざっと見た感じでは問題なさそうなコードです。
エラーを見る限りですとCastSprite周りで何か起こってるぽいのですがどうでしょう?

あとSceneLoaderを使用する時はクラスの衝突に十分注意が必要です。
各swfのクラスの衝突を避ける為、
A.swfで使用するクラスは全てA_~(例えばA_IndexScene)B.swfで使用するクラスはB_~
の様にしています。この辺も見ていただけないでしょうか?
IP記録
kiri_fla
初心者
*
投稿: 32


プロフィールを見る
« 返信する #2 投稿日:: 2月 07, 2010, 12:51:59 午後 »

northprintさま

いつもありがとうございます。
■疑問点1
ご指摘いただいたように
_loadscene = new LoadScene(new URLRequest("gallery.swf") ,null,null,{cacheAsResource:false , preventCache:true}),

としてみてシーンに移動してみると

Error: シーンリストに追加されていない状態で、load() メソッドの loaderContainer プロパティを省略することはできません。
   at jp.progression.scenes::SceneLoader/loadBytes()
   at jp.progression.commands.net::LoadScene/_complete()
   at flash.events::EventDispatcher/dispatchEventFunction()
   at flash.events::EventDispatcher/dispatchEvent()
   at flash.net::URLLoader/onComplete()

というエラーが表示されました。
LoadSceneの第2引数の[ loader:SceneLoader = null]の部分にthis を指定することで大丈夫でしたが、キャッシュからやはり取得している模様??
でローディングバーがでませんでした。(プログレス中のトレース文が表示されていないので)

■纏めてSWFを読み込みに関して
こちらに関してはご指摘頂いたようMCに指定していたリンケージ名(GalleyPage.as)のパスが間違ってました。
パスを直したところシーン移動も可能になったのですが、ローディングバーのプログレスイベントが発動していない模様。

推測ですが、LoaderListに読み込むSWFの数だけaddCommandでSceneLoaderでシーン追加していますが、読み込みそのものは、SceneLoader内のLoadSceneが行っている為なのではないかと思うのですが・・・

//コンテンツの数
for (var i:int = 0; i < listdata.length; i++) {
_lList.addCommand(addScene(new ContentSceneLoader("loader"+(i+1),{cName:listdata})));
   }

他の画像やSWFなどをまとめて読み込むときは
*private var cache:Object={group:"contents", cacheAsResource:true, context:new LoaderContext(true)}

for (var i:int = 0; i < listdata.length; i++) {
_lList.addCommand(new LoadSWF(new URLRequest(listdata), null, cache));
   }

などLoadSWF LoadBitmapDataなどを使用すればloaderlistのプログレスイベントも発動するようなのですが、LoadSceneの場合はそうもいかない
(試してみたら駄目でしたので)ようでおそらく読み込んだSWFを連結??させるためにはSceneLoaderを経由・・というか使用しないとダメっぽい感じなので・・

IP記録
northprint
管理人
常連メンバー
*****
投稿: 183



プロフィールを見る サイト
« 返信する #3 投稿日:: 2月 08, 2010, 01:01:40 午前 »

kiri_flaさま

すいません。少し間違っていましたね。。
連結したシーンは再連結する前にremoveされていますよね。。。

うーん?
もう少しみてみます。
お役にたてず申し訳ありません。。
IP記録
kiri_fla
初心者
*
投稿: 32


プロフィールを見る
« 返信する #4 投稿日:: 2月 08, 2010, 11:05:18 午前 »

northprintさま

いえいえいつもご教授いただいてますので助かってます。
疑問点1に関してはなぜローディングバーがでないのかに関しては1回目の画面遷移ではローディングが表示されてますし、2回目以降はキャッシュから取得ということであればもし重いSWFで時間がかかった場合にローディングがでないとユーザーが「???」と思ってしまうかも・・と勝手に思ったもので自動的にキャッシュから取得されてるとのことであれば2回目以降ローディングバーが出なくてもスムーズにSWFが再生できるればいいのかな~なんて思ってます。

疑問点2に関しては自分もちょっと見当がいまのところ付かないので自分ももう少し調べてみます。
IP記録
ページ: [1]
  印刷  
 
ジャンプ先:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS!