- 締切済み
AS3によるFLASHサイトのローディング処理について
いつもお世話になります。 ActionScript3(環境:FLASH CS4)にてフルFLASHサイトの制作を行なっております。 サイトにアクセスした際に表示されるローディング部分に関するご質問です。 ローディング処理部分をタイムラインの『1』に記載し、ローディング完了後にタイムライン『2』 に移動してページの表示処理が行なわれる仕組みで作りましたが、下記の2点でつまずいております。 (※ローディング処理のソースは下記に記載しております) 1.ローディングゲージが伸びていかない。 loadingImageというMovieClipのマスク部分のscaleXを0にし、ローディングの読み込み完了分に 合わせて徐々にscaleXの値が上がっていき、ローディングが全て読み込みされた時点でscaleXが 1になるような仕組みで作ったつもりですが、実際にサイトにアップしてもゲージが徐々に上がらず、 一気にscaleXが1になってしまいます。 徐々に伸びる部分にイージング処理を入れたかったので、scaleの値を代入する場所に (per - loadingImage.logoMask.scaleX)/8;という処理を入れております。 一般的なFLASHサイトのように徐々にゲージが伸びていく処理を行うにはどのようにしたら良いでしょうか? 2.ローディングアニメーションが表示されるまでに時間がかかる 一般的なFLASHサイトでは、サイトにアクセスした際にすぐにローディング画面が表示され、 ロード処理が開始されますが、下記の作りではローディング画面が表示されるまでにかなり時間が かかってしまい、真っ白な画面のままでブラウザが暫くサイトの読み込みを行なっているようです。 どうやら、ローディング画面が出る前の時点で画面全体の読み込み処理が始まってしまっている為に、 上記の1のゲージが伸びていかないことも関連しているようなのですが、 サイトにアクセスした際にスムーズにローディング画面を表示させ、そこからデータの読み込みを行なうには どのような記述が必要でしょうか? お手数では御座いますが、宜しくお願い申し上げます。 // =============================================================================== this.stop(); var info:LoaderInfo = root.loaderInfo; // ローディングゲージMC var loadingImage:MovieClip = new loadingImage_mc(); loadingImage.logoMask.scaleX = 0; // このタイムラインにイベントリスナーを登録 root.addEventListener(Event.ENTER_FRAME, watchLoading); function watchLoading(event:Event) { var per:Number = info.bytesLoaded / info.bytesTotal; loadingImage.logoMask.scaleX += (per - loadingImage.logoMask.scaleX)/8; if (per >= 1) { // このタイムラインに登録したイベントリスナーを削除 root.removeEventListener(Event.ENTER_FRAME, watchLoading); // タイムライン2に移動 play(); } } // ===============================================================================
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- H240S18B73
- ベストアンサー率65% (190/288)
1の症状 マスクはマスクされる領域がないと マスクなしってことにされます 2の症状 ライブラリの中で最初のフレームに書き出し チェック付いてるシンボルが他にも 沢山あったりするとかでしょうか 以下要らないおせっかいです このスクリプトだと 読み込みが完了しても 全部のロゴを表示する前に フレーム2に行っちゃいますが それでいいんですか? 多分そんなに重いファイルじゃない限り 一瞬でDL終わってイージングもなにもなく 一瞬1/8だけロゴを表示して刹那 次ぎに行っちゃうと思うのですが あと、作ったloadingImage_mcをどこにも addChildしてないんですが 動かそうとしてるloadingImageと スクリプトに書かれてるloadingImageは 本当にちゃんと同じものですか?
お礼
H240S18B73様 早々にご回答いただきありがとう御座います。 下記インラインにてご回答いたします。 >1の症状 >マスクはマスクされる領域がないと >マスクなしってことにされます 失礼いたしました。 ローディング処理の部分だけを記載しましたので、 インスタンス宣言を省いてしまっておりました。 正確にはloadingImage_mcを宣言しており、 正しくマスクもされております。 >2の症状 >ライブラリの中で最初のフレームに書き出し >チェック付いてるシンボルが他にも >沢山あったりするとかでしょうか 最初にフレーム書き出ししているシンボルが計16個程あります。 1フレーム目(今回の例で言うローディング処理部分)で使わない シンボルはプロパティで「1フレーム目に書き出し」にチェックを入れない にした方が適切でしょうか? >このスクリプトだと >読み込みが完了しても >全部のロゴを表示する前に >フレーム2に行っちゃいますが >それでいいんですか? ローディングが終了し、且つそのタイミングで全部のロゴ (ここで言うマスクのscaleXを1)を表示させたいのですが、 どの処理部分を変更したら良いでしょうか? >多分そんなに重いファイルじゃない限り >一瞬でDL終わってイージングもなにもなく >一瞬1/8だけロゴを表示して刹那 >次ぎに行っちゃうと思うのですが SWFのサイズは約1.86MBになります。 コンテンツ量等にもよると思いますが、 一般的なフルFLASHサイトの容量はどの程度なのでしょうか。 ご回答いただけると幸いです。 宜しくお願い申し上げます。
補足
お世話になります。 先程記載しました内容に補足です。 1フレーム目に書き出ししているシンボルが16個程あると記載しましたが、 ローディング時に必要ないシンボルを1フレーム目に書き出ししないように設定した所、 SWFファイル容量も約300KBとだいぶ軽くなりました。 最初の読み込み時も無駄な時間がかからずにローディング画面に 遷移するようになりました。 ただ、ご指摘の通り上記のスクリプトですと、最初に一瞬ロゴが表示されたまま ロード完了になってしまい、マスクのscaleが1になる前に次のステップに進んでしまいます。 こちらの正しい処理内容をお教えいただけると幸いです。 宜しくお願い申し上げます。