こんにちは、
現在WinでFlash MXを使用してます。
getTimer関数を使用して待ち時間を作ってみたのですが動作しません。
現在作成したプログラムは
◆1フレーム目
startTime = getTimer();
timeOut = 3000;
◆2フレーム目
if( getTimer() > startTime + timeOut ){
gotoAndPlay(3);
}
else{
gotoAndPlay("lop");
}
このようになっており、
”3フレーム目”にジャンプしてほしいのですが、
ジャンプしません。
何故でしょうか?
No.1ベストアンサー
- 回答日時:
フレームアクションは、再生ヘッドがフレームに来た、その時1度しか実行されません。
また、Flash はリソースの過剰占有やシステムフリーズを避けるために、同一フレームに連続して再生ヘッドをセットできない設計になっています。
よって、変数の値の監視などのように繰り返しスクリプトを実行させたい場合は、複数のフレーム間を gotoAndPlay でループさせて再生ヘッドを何度もセットし直すか、あるいは、ムービークリップがステージに存在している間常に発生している enterFrame イベントを利用する必要があります。
フレーム1に、” lop ”というフレームラベルを付けていませんでしょうか?
フレーム1にこのラベルが付いているとすると、フレーム1~2間をループするので、スクリプトはその都度実行されます。
if 文の条件が不成立の時はフレーム” lop ”(おそらくフレーム1だと思いますが)に戻り、再びフレーム1のスクリプトも実行されます。
となると、変数 startTime の値もフレーム1での getTimer の戻り値に更新されることになります。フレーム1から2への移動にかかる時間は、理論上はフレームレート分の1秒しかかからないのですから、startTime と timeOut との和が、フレーム2での getTimer の戻り値よりも小さくなることはまずありえません。従って、if 文の条件がいつまでも成立せず、フレーム3への移動は行われないことになります。
要するに、startTime の値が毎回更新されることが原因ではないかと思います。
フレームアクションで実現するのであれば、現在フレーム2に設定しているアクションをフレーム3に移し、フレーム2に空きフレームを作って、待ち時間が経過していないうちはフレーム2に戻り、経過後に先に進むようにしてはいかがでしょう。
ちなみに、フレーム間のループではなく、ムービークリップの enterFrame イベントと getTimer で待ち時間を実現する作り方は、以前、別の質問で紹介したことがあります。よろしければご参照ください。
・○秒後にフレーム移動
http://okweb.jp/kotaeru.php3?q=793619
------------------
Flash MX をお使いでしたら、setInterval というアクションを使う方法もあります。
setInterval は本来、一定時間ごとに繰り返し指定の関数を呼び出すアクションですが、任意のタイミングで呼び出しをキャンセルすることもできます。
この仕組みを利用し、一旦 setInterval でフレーム3に移動して、フレーム3で呼び出しをキャンセルすると、一定時間後にフレームを移動するという処理になります。
正式には関数を作って登録するところですが、関数を作るまでもない処理の場合は、呼び出す関数の指定である第1引数に、匿名の関数として直に関数を書いても構いません。
スクリプトにしますと、次のようになります。
(↓このスクリプトをコピーして使う場合は、各行頭の全角のスペースを、全て半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります)
・フレーム1のスクリプト
//3秒後にフレーム3に移動
timer_ID = setInterval( function(){ gotoAndPlay( 3 ); } , 3000 );
//一定時間、ここで待機
stop();
・フレーム3のスクリプト
//関数の呼び出しをキャンセルする
clearInterval( timer_ID );
関数を呼び出す間隔(第2引数)はミリ秒で指定します。例えば3秒ごとであれば、3000 となります。
setInterval の戻り値はタイマーの識別番号です。この識別番号は clearInterval で関数の呼び出しをキャンセルする時に必要ですので、setInterval を実行した時に変数に保存しておきましょう。
長くなってすみませんでした。
不明な点がありましたら、補足してください。
お礼が遅くなりましてすいません。
とても丁寧に詳しく教えていただきありがとうございました。
「フレーム1に、” lop ”というフレームラベルを付けていませんでしょうか?」
この質問ですが、フレーム2につけていました。
フレーム数を増加させ、この部分の修正をしたところ
動作しました。
本当に助かりました。ありがとうございます。
またsetIntervalも試してみましたが、動作しなかったので、そちらのほうはもう少し検証してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 【C++】IDirect3DSurfaceのディープコピーは可能ですか? 1 2022/07/06 02:47
- 画像編集・動画編集・音楽編集 動画をディスク作成すると画像が乱れる。 4 2022/06/24 07:49
- メガネ・コンタクト・視力矯正 眼鏡が小さくて横や後ろが見づらい 6 2023/07/04 08:49
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- サングラス・カラコン 4000円以内のメガネフレーム 9 2022/12/01 10:30
- その他(教育・科学・学問) 技術のテストの問題です。やり方を教えてください! 間1.7バイトは何ビットか。 間2.5ビットで表現 4 2023/02/27 00:09
- カスタマイズ(バイク) カスタマイズ 1 2022/11/12 01:09
- ホームページ作成・プログラミング Adobe FLASH に代わるソフトはありますか? 4 2022/09/27 19:35
- アンテナ・ケーブル コンデンサーマイクからの異音 3 2022/10/18 05:56
- iPhone(アイフォーン) iPhoneでの動画撮影の画質に関しての質問です。 現在iPhone7を使っているのですが、外で動画 2 2023/07/07 12:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
suzuka rollOverで画像が徐々...
-
WEBブラウザの重複起動の禁止
-
Excel VBA SetFocus
-
エクセルVBA読み込みアドレスの...
-
cookieの保存について
-
スライドプレゼンテーション機...
-
巻き戻しボタンを作りたいので...
-
Flashゲームのセーブ機能の作り方
-
5フレーム目で3秒止めて7フレー...
-
シーケンス番号の初期値
-
プリローダーで、画像を下から...
-
Kiss DN AFフレームを非表示に...
-
iframeはSEO的に不利になる?
-
VB6のスクロールバー付きフレー...
-
メディアプレーヤーで再生する...
-
グリーティングカード
-
処理の速い当たり判定について[...
-
VBSでHTMLソースの取得方法で
-
2倍速を等速動画に(車載動画)
-
ドロップフレームの計算をエク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WEBブラウザの重複起動の禁止
-
JavaScriptからsetVariable()で...
-
時刻の設定と取得について
-
FLASH LITE1.1のテキスト入力に...
-
FlashLite1.1でのランダム表示...
-
Excel VBA SetFocus
-
Flash lite1.0で カウントダウン
-
Flash lite1.0の計算クイズ
-
Suzukaで時計のflashを作成し、...
-
_parent.gotoAndStopコマンドに...
-
二択のフレーム移動
-
FLASH上でインラインフレームみ...
-
フレーム内に移動したい
-
ドロップフレームの計算をエク...
-
Access2010でサブフォームのフ...
-
phpで音を鳴らす
-
フレーム内のオプションボタン...
-
【C#】wavファイルの複数同時再生
-
VB6のスクロールバー付きフレー...
-
C#でDLLファイル読み込みを行う...
おすすめ情報