こんにちは、
現在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ランキング
-
ゲオでカードを作るのは何歳か...
-
フラッシュゲームアーカイブ2
-
レジリエンス 変換キーが作動し...
-
この曲はなんでしょう?
-
arduino プログラムについて
-
FLASHの再生はできないのでしょ...
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
-
VBAのコンボボックスの年月表示...
-
Adobe Flash Player
-
Windows10重い
-
uwscでExcelに自動記入
-
パソコンのリカバリーについて
-
iPhoneです。 Adobeフラッシュ...
-
Adobe(マクロメディア)のFLAS...
-
ヘッダーデザインをするさい形...
-
更新されて起きた問題
-
googlechromeでadobeflashplayer
-
Flash playerを有効にするには
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WEBブラウザの重複起動の禁止
-
Flashでのゲーム用アナログ時計...
-
ムービーの早送りと巻き戻しが...
-
ボタンで移動する前に、特定のM...
-
Error#1009 時計のシーン移動ボ...
-
Flash Professional CS5
-
ループ再生のflashをタイムライ...
-
画像がランダムに表示されるFLA...
-
ActionScriptの基本的な部分で...
-
キーボードを押した時のムービ...
-
【ActionScript】命令文を再実...
-
FLASH lite1.1での質問というか...
-
画像をランダムに表示させたい
-
深い階層でのムービークリップ...
-
Flash lite1.0の計算クイズ
-
プルダウンメニューとフェード...
-
loadMovieで読み込んだswf
-
外部画像を読み込み、ボタンで...
-
Flashで右クリックメニューにつ...
-
フレーム内に移動したい
おすすめ情報