
こんにちは、
現在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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
potplayerについて質問です
-
chrome flash
-
FLASHの再生はできないのでしょ...
-
uwscでExcelに自動記入
-
PHPの変数をAS3に渡す方法
-
FLASHでゲームを作っていた人は...
-
この曲はなんでしょう?
-
laptop go2からの買い替え、lap...
-
スクリップト
-
私のコンピューター上のファイ...
-
arduino プログラムについて
-
フラッシュゲームアーカイブ2
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
-
Form内のselectを連動させるに...
-
Flashをブロックしないで
-
ダウンロードしたデジブックはa...
-
ad or script について
-
Flashplayerの運用について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WEBブラウザの重複起動の禁止
-
FlashVarsでswfへ変数を渡し、...
-
一度再生したFlashをスキップす...
-
フレームアクションについて。
-
mp3でページを移動しても音を鳴...
-
パソコンのオープンフレームっ...
-
フレーム内のオプションボタン...
-
フレーム内に移動したい
-
cisco catalystのトラブルシュ...
-
VBで動的に作成したパネルの上...
-
phpで音を鳴らす
-
ActionScript 3.0についての質...
-
車の運転時のメガネ 縁なし(...
-
VB6のスクロールバー付きフレー...
-
フレームでのResponse.Redirect
-
オプションボタンを矢印キーで...
-
キーフレームとはなんですか?
-
Access2010でサブフォームのフ...
-
C#でDLLファイル読み込みを行う...
-
再生中のフラッシュ・巻き戻し...
おすすめ情報