
初めまして。
当方初心者なので、よくわからないので、質問させていただきます。
外部にswfとしてフレームラベルの複数ついたものがあって、
それをmc(mcs_mc)で読み込みし、スクリプトで一定時間毎に
mcに読み込んだ外部swfのフレームラベル(chapter1~chapter10)を移動させたいのですが、うまく動いてくれません。
どの用にしたらよいでしょう?よろしくお願いします。
onClipEvent(load){
this._lockroot = true;
}
onClipEvent(enterFrame){
setInterval( function(){ mcs_mc.gotoAndPlay("chapter2"); }, 1000);
}
No.1ベストアンサー
- 回答日時:
enterFrame イベントは、ムービークリップ(ここでは mcs_mc )がステージに存在している間、常に発生しています。
このイベントを利用して setInterval 関数を実行すると、タイマーが複数登録されてしまいます。
タイマーの作成は1回だけでいいので、フレームアクション(タイムラインに設定するアクション)で充分です。
また、読み込むムービーが長かったり容量が大きい場合は特に、読み込みが終了してからタイマーを設定した方が安全です。
まず、読み込みが済んだかどうかの判定ですが。
loadMovie で読み込む場合は、ムービーが読み込まれるムービークリップにロード済みの容量と総容量が保存されます。これらの情報は getBytesLoaded と getBytesTotal メソッドを使って取得できますので、ロード完了率を算出できます。
メインのタイムラインでも、mcs_mc での読み込みの進捗状況は把握できます。完了率をパーセントで出し、100 %になっていたら読み込みが終了したと判断できます。
このあたりは、ムービーの Now Loading 画面の作り方とよく似ています。
ただ、ロード済み・トータルの容量やフレーム数を取得する対象が、_root (ムービー自身)からムービークリップ mcs_mc に変わっただけのことです。
Now Loading 画面については、紙面の都合上、今回は割愛させていただきます。初心者向けの解説サイトや解説書でもしばしば取り上げられていますし、このサイトでも何度か質問に出ていますので、詳しい原理・作り方などはそちらをご参考になさってください。
ムービーの読み込みが終了した時に、タイマーを作成します。
タイマーは次のように考えます。
フレームラベルを chapter +通し番号( 1 ~ 10 )で付けていらっしゃるとのことですので、これを利用します。
チャプターの番号だけを、変数で管理します。
番号だけなら単なる数値なので、算術演算も可能です。この変数をカウントアップしながら、その値を元に該当するフレームに移動する関数を1つ作り、setInterval ではこの関数を登録します。
ムービーの流れをまとめてみますと。
フレーム1:外部ムービーの読み込みと初期設定(関数の定義など)
フレーム2:読み込み終了を待つフレーム。スクリプトは設定しない。
フレーム3:読み込み終了判定と、タイマーの作成。普段はこのフレームを表示する。
スクリプトは、大体、次のようになります。
このスクリプトはフレームに設定してください。
(↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります)
・フレーム1
//現在再生中のチャプター番号を保持(1~10)
chapter_no = 1;
//一定時間ごとにチャプターを変更する関数
function Chapter_jump()
{
//チャプター番号を変更
//10まで再生したら1に戻る
chapter_no++;
if( chapter_no > 10 )
{
chapter_no = 1;
}
//次のチャプターを再生
mcs_mc.gotoAndPlay( "chapter" + chapter_no );
}
//外部ムービーの読み込み
mcs_mc.loadMovie( "***.swf" );
・フレーム3
//読み込み完了率を算出
loaded = Math.floor( mcs_mc.getBytesLoaded() / mcs_mc.getBytesTotal() * 100 );
//ムービーの読み込み終了を待つ
if( loaded < 100 )
{
gotoAndPlay( 2 );
}
else
{
//タイマーの作成(一定間隔ごとにチャプター移動関数を呼び出す)
timerID = setInterval( Chapter_jump , 1000 );
//メインのタイムラインはここで止める
stop();
}
フレームアクションは、再生ヘッドがフレームに移動してきた、その時1度しか実行されません。
再生ヘッドをセットし直せばフレームアクションを何度も実行できるのですが、Flash の仕様上、再生ヘッドは全く同じフレームに続けてセットすることはできないようになっています。
フレームアクションで変数の値を監視するような場合は、一旦別のフレームに移動し、改めてスクリプトを設定したフレームに戻ってくる方法があります。
フレーム間をループすることで、フレームアクションが何度も実行されます。どこか別の処理で変数の値が書き換えられるのを待ってから、次の処理に進みたい時に便利です。
今回は、フレーム2と3の間をループしながらフレーム3のアクションを何度も実行させ、読み込み終了まで待機できるようにしています。
上記のスクリプトでは、タイマーでチャプター 10 まで再生された後は再びチャプター1に戻る、無限ループ再生になります。
チャプター 10 でムービーを停止するには、読み込むムービーの最後に stop(); を入れ、Chapter_jump 関数内の if( chapter_no > 10 ) { ・・・ } の部分を、次のように変更してください。
if( chapter_no >= 10 )
{
//タイマーを削除
clearInterval( timerID );
}
タイマーを削除するには、clearInterval 関数を使います。
setInterval 関数を実行した時に、内部で使われているタイマーの管理番号(タイマー ID )が返ってきます。
この ID は、clearInterval で削除するタイマーを指定する時に必要になります。
上記のスクリプトでは timerID という変数にこの ID を保存しています。
タイマーを削除すると登録した関数は呼び出されなくなるので、チャプターの移動も行われません。
長くなってすみませんでした。
不明な点がありましたら、補足してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript スマホ上で、左右スワイプで次のページに移動させたいです 2 2022/11/11 17:04
- スピーカー・コンポ・ステレオ MCカートリッジのオススメを教えてください。 お時間割いてくださりありがとうございます。 当方、現在 10 2022/07/04 14:20
- 工学 材料力学(構造力学?)についての問題です。 写真のような形で部材CDの内力を考えます。 C点からの距 1 2022/11/22 00:41
- その他(ビジネス・キャリア) 海外から請求書がきたのですがPC/MCの意味がわからないのとそこの数字があってるのかわからなくて海外 2 2022/11/08 11:32
- BTOパソコン https://www.youtube.com/watch?v=8h8EVXotOwQ&t=14s 2 2022/12/23 02:25
- プリンタ・スキャナー Wordで作った宛名ラベルを印刷しようと思って、プリンターの上のところにある、手差しトレイ的なところ 3 2022/11/17 18:40
- Visual Basic(VBA) 3つの条件を指定してVBAで行を削除したい 条件1:分類1が重複 条件2:分類2が重複 条件3:個数 6 2022/06/24 11:07
- 宇宙科学・天文学・天気 AIが答えた方程式 1 2023/02/20 00:12
- 物理学 『四次元温度』 2 2022/05/09 11:07
- Gmail Gmailのラベル内のメールを受信トレイに移してから、そのラベルを削除したいです。 1 2022/09/10 20:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
外部画像と音楽(MP3)の取り入れ方
-
外部swfファイルを予め読み込ん...
-
SDHCカードのデータをPCに取り...
-
FLASH読み込み時の「白い間」を...
-
for文について
-
読み込んだテキストを Split で...
-
ヤフオクの画像拡大機能が
-
gooメールでログインしたら
-
外部ファイルの先読み
-
flv外部読み込みファイルのエン...
-
mcの中のフレームラベルの移動
-
動画をダウンロード中の画面
-
Wi-Fi接続のiPhoneでYouTubeを...
-
2つのswfファイルをつなげてい...
-
こういうフレームはなんという...
-
困ってます。文字が浮かびあが...
-
3D表現の制御
-
Flash AS3.0 初歩的な質問
-
条件が複数ある場合のif文の書き方
-
画像を呼び出したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
delphi6trialで読み込み違反エラー
-
「Now Loading」の表示
-
FLASHについて
-
MovieClipLoaderってテキストは...
-
C#でDLLファイル読み込みを行う...
-
aspで別ドメインにあるXMLの読...
-
PIC EEPROM
-
for文について
-
DVD(ROM)DLの読み込み速度
-
DVD-RAMの読み込み
-
再読み込みが可能なPDFビューワ...
-
ニコニコ動画のある映像をクリ...
-
UNIXでのファイル操作の方法
-
Now Loading又は同じ動作を必ず...
-
GetPrivateProfileString変値
-
onPressに関する質問
-
FLASH8 外部テキストファイル...
-
[C#]webbrowserのstop()について
-
ループ処理について
-
外部ファイルからのデータの読...
おすすめ情報