トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     getTimerの制御方法(一時停止・再生)
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
yuuyuu
Åê¹ÆNo.3486
投稿日時: 2004-2-3 17:56
常連
居住地: 茨城県
投稿: 118
使用環境:
Win2000,XP
Flash MX2004
getTimerの制御方法(一時停止・再生)
こんにちは。

今、FlashMXで、CD-ROMコンテンツを制作しています。
で時間制御の方法でつまづいています。

1フレームごとにイメージ(JPG等)を配置し、下記コードをフレーム毎に実行して10秒経ったら次のフレームへ、というスライドショーです。

start = getTimer();
timer = 10*1000;
this.onEnterFrame = function() {
if (getTimer()>start+timer) {
this.nextFrame();
}
};

やりたいことは、一時停止ボタンを押すと、停止し、再生ボタンを押すとその続きの時間から再生させる(7秒で停止したとき、再生すると残りの3秒後に次へ進む)、ということなのですが、方法がわかりません。
タイムラインを伸ばしてstop()すれば簡単なのですが、ページが多く、それをやるとやたらとタイムラインが長くなるのでscript制御でやりたいのです。
ご教示頂けたら幸いです。

よろしくお願いします。
コマツ
Åê¹ÆNo.3488
投稿日時: 2004-2-3 18:29
職人
居住地: 東京都葛飾区
投稿: 356
使用環境:
windows7
CS5.5 CS6
Re: getTimerの制御方法(一時停止・再生)
こんばんは。提案させてもらいました。

フレームの方に少し付け足して、theflg変数の状態でタイマーの確認の実行をさせます

start = getTimer();
timer = 10*1000;
theflg = true
nowstoptime = 0;

this.onEnterFrame = function() {
 if(theflg){
  if (getTimer()>start+timer) {
   this.nextFrame();
  }
 }
};


ボタンの方には

on(press){
 theflg = !theflg;
 if(theflg){
  start = getTimer();
  timer = 10*1000-nowstoptime; 
 }else{
   nowstoptime = getTimer() - start;
 }
}

とか入れてみるのはどうでしょう?
ボタンを押したとき「theflg」が「true」←→「false」と
入れ替わります。
falseの時には現在どれくらいの時間が経っているかを変数に
とっておきます。
trueになった時には、startの変数を初期化し、残りの時間を、
10秒から引いた値として再設定します。


ずっと、onEnterFrame でまわしているのも構造上良くない気
もしますが、現在のものに付け加えるなら、こんな感じで実現
できないでしょうか?

参考になれば幸いです
野中文雄
Åê¹ÆNo.3489
投稿日時: 2004-2-3 18:52
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: getTimerの制御方法(一時停止・再生)
やり方は、いろいろあります。イベントハンドラメソッドを利用されているので、functionは使ってもよいのでしょうね。
// フレームアクション
this.nTimer = 10*1000;
this.xStart();
function xStart() {
  if (this.nStart == undefined) {  // 初めてのスタート
    this.nStart = getTimer();
    this.nElapsed = 0;
  } else {  // 一時停止から再開
    this.nStart = getTimer()-this.nElapsed;
  }
  this.onEnterFrame = function() {
    if (getTimer()>nStart+nTimer) {
      this.nextFrame();
    } else {  // 時間待ち確認用
      // TextFieldインスタンスmy_txtを配置して確認
      this.my_txt.text = (getTimer()-nStart)/1000;  // テスト用
    }
  };
}
function xStop() {
  this.nElapsed = getTimer()-nStart;
  delete this.onEnterFrame;
}

なお、startは予約語です。timerなどの一般的な単語も、変数としては避けた方が無難です。
引用:
yuuyuuさんは書きました:
1フレームごとにイメージ(JPG等)を配置し、下記コードをフレーム毎に実行して10秒経ったら次のフレームへ、というスライドショーです。
start = getTimer();
timer = 10*1000;
this.onEnterFrame = function() {
	if (getTimer()>start+timer) {
		this.nextFrame();
	}
};

やりたいことは、一時停止ボタンを押すと、停止し、再生ボタンを押すとその続きの時間から再生させる(7秒で停止したとき、再生すると残りの3秒後に次へ進む)、ということなのですが、方法がわかりません。


----------------
 

野中文雄
Åê¹ÆNo.3493
投稿日時: 2004-2-3 20:47
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: getTimerの制御方法(一時停止・再生)
ひとつ気になったのは、元のスクリプトでは一旦フレーム移動が開始すると、MovieClip.nextFrame()メソッドは毎フレーム実行されてしまいます。

1フレームごとに10秒待つという処理ではないのでしょうか? もしかすると、すべてのフレームをキーフレームにして、この元のスクリプトをフレームアクションに設定しているのですか? だとすると、以下の修正で、フレームアクションは、最初のフレームに設定するだけで足ります。
// フレームアクション: 最初のフレームのみ
this.nTimer = 10*1000;
this.xStart();
function xStart() {
  if (this.nStart == undefined) {
    this.nStart = getTimer();
    this.nElapsed = 0;
  } else {
    this.nStart = getTimer()-this.nElapsed;
  }
  this.onEnterFrame = function() {
    if (getTimer()>nStart+nTimer) {
      this.xReset();  // 処理をリセット
      this.xStart();  // 時間待ち処理をスタート
      this.nextFrame();
    } else {  // 時間待ち確認用
      // TextFieldインスタンスmy_txtを配置して確認
      this.my_txt.text = (getTimer()-nStart)/1000;
    }
  };
}
function xStop() {
  this.nElapsed = getTimer()-nStart;
  delete this.onEnterFrame;
}
function xReset() {
  delete this.onEnterFrame;
  delete this.nStart;
}


----------------
 

yuuyuu
Åê¹ÆNo.3509
投稿日時: 2004-2-4 14:45
常連
居住地: 茨城県
投稿: 118
使用環境:
Win2000,XP
Flash MX2004
Re: getTimerの制御方法(一時停止・再生)
Komatsu様
早速のお返事ありがとうございます。

私のコーディングに+α、という形での実現方法をお教えいただけたので、自分に何が足りないかがとてもよく見えました。
また本題とは別ですが、true←→falseの切替えって" A = !A "たったこれだけでOKだったのですね。今までもっとまわりくどいやりかたしてました。

ありがとうございました。
yuuyuu
Åê¹ÆNo.3512
投稿日時: 2004-2-4 14:55
常連
居住地: 茨城県
投稿: 118
使用環境:
Win2000,XP
Flash MX2004
Re: getTimerの制御方法(一時停止・再生)
Fumio様
お返事ありがとうございます。

おっしゃる通りです。
正直、1フレーム毎に呼び出すのはムダだなぁ、とは思っていましたがそれも今回のことも含め分からなかったことなのです。
でも今回お教えくださいました方法ですっきりと収めることができました。ただ、まだ最初のフレームのみでOKのコードの流れが感覚的に掴みきれていないので、これからじっくり解析しようと思います。
ありがとうございました。

引用:

1フレームごとに10秒待つという処理ではないのでしょうか? もしかすると、すべてのフレームをキーフレームにして、この元のスクリプトをフレームアクションに設定しているのですか? だとすると、以下の修正で、フレームアクションは、最初のフレームに設定するだけで足ります。
野中文雄
Åê¹ÆNo.3515
投稿日時: 2004-2-4 15:09
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: getTimerの制御方法(一時停止・再生)
イベントハンドラメソッド(今回はMovieClip.onEnterFrame)は、明示的に削除(delete)するか、定義先のタイムラインがフレームから退場するまで存続し、(イベントが発生するかぎり)処理を続けます。ですから、計測時間のリセットをきちんと行えば、ひとつのスクリプトで継続して対処することが可能です。
引用:
yuuyuuさんは書きました:
でも今回お教えくださいました方法ですっきりと収めることができました。ただ、まだ最初のフレームのみでOKのコードの流れが感覚的に掴みきれていないので、これからじっくり解析しようと思います。

ちなみに、ifステートメントの部分は、つぎのように簡略化することもできます。もっとも、タイプの手間が減るだけで、処理効率に基本的な変化はありません。詳しくは、[if (condition=1)]をご参照ください。
// Buttonアクション
on(press){
 if(theflg = !theflg){
  // [後略]

引用:
yuuyuuさんは書きました:
また本題とは別ですが、true←→falseの切替えって" A = !A "たったこれだけでOKだったのですね。今までもっとまわりくどいやりかたしてました。


----------------
 

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops