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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     ボタンを押している間、経過時間をカウントアップ
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
kotatukame
Åê¹ÆNo.9845
投稿日時: 2004-8-13 13:26
新米
居住地: 埼玉
投稿: 17
使用環境:
WindowsXP
FlashMX2004 Flash5
ボタンを押している間、経過時間をカウントアップ
いつもお世話になります
ボタンを押している間、経過時間をカウントアップするような動作をしたいのですが、
次の動作がうまくいきません。
1、マウスを押している間の判別がうまくいきません
  (マウスDown中はカウント実行でマウスUpでカウント終了…予定です)
2、カウント中に経過時間が表示しないで、
  do-while条件終了後に経過時間が表示されてしまう。

プログラムは以下のとおりです
まったくのヒヨッコなんでトンチンカンなプログラムかもしれないですが
アドバイスをいただけないでしょうか…
==========================================================
// btn_CountUpのボタンを押している間、
// lbl_NowValueの値を1秒置きに
// カウントアップしていきたいプログラムです

// btn_CountUp:ボタンコントロール
// lbl_NowValue:経過時間を表示するラベルコンポーネント

i=1;//カウントアップ用
ClickFlag=false;
//false=マウスが押されています true=マウスが放された

btn_CountUp.onPress=function(){
 StartTime=getTimer();

 do{
   //経過時間のチェック
   CurTime=getTimer();

   //1秒単位でカウントアップ
   if((CurTime-StartTime) % 1000 == 0){
    i++;//カウントアップ
    lbl_NowValue.text=i;//経過時間を表示
   }

   //マウスが放されたら停止
   if(ClickFlag == true){
    break;
   }

  }while(i < 10);
}

//マウスが放されたことを通知
btn_CountUp.onRelease=function(){
  ClickFlag=true;
}
rin-ko
Åê¹ÆNo.9847
投稿日時: 2004-8-13 14:39
職人
居住地: 東京
投稿: 397
使用環境:
MacOSX10.5/10.4
WinXP SP3
MX2004Pro/CS3
Re: ボタンを押している間、経過時間をカウントアップ
kotatukameさん、こんにちは。
たしか繰り返し処理中は他の処理(画面の再描画なども)行われないと思いますので、マウスダウン中do{}while()を実行してると、その間は経過時間の表示も出来ないんじゃないでしょうか?
なので、ClickFlagがflaseの間はsetInterval()なりonEnterFrameなりを使って定期的に処理を実行するかたちにした方がよいと思いますが、いかがでしょう。
森 巧尚
Åê¹ÆNo.9851
投稿日時: 2004-8-13 15:34
モデレータ
居住地: 宝塚
投稿: 650
使用環境:
.5/CS4/Safari3
XP+2000//IE6
Re: ボタンを押している間、経過時間をカウントアップ
そうですね。このような場合、rin-koさんの言われるようにonEnterFrameなどを使って定期的に処理します。

kotatukameさんのプログラムだと、do文が10回したら抜けるようにしてあるのと、もう一つの偶然がうまく重なって抜けていますが、本来はここで処理が止まってしまいますよ。
また、秒数のカウントでは、1000で割ったあまりが0になったときを調べておられるようですが、getTimerで得られるミリ秒も「調べた瞬間の値」が得られるだけなので、きっちりした値が得られることはごくまれです。

ということで、onEnterFrameを使って定期的に処理し、「次にカウントする予定のミリ秒を過ぎたら」という条件で調べればカウントできますよ。
#それからClickFlagがtrueのときがマウスが押されている状態にしています。
i = 0;//カウントアップ用
ClickFlag = false;
//true=マウスが押されています false=マウスが放されています
btn_CountUp.onPress = function() {
 StartTime = getTimer();
 YoteiTime = 1000;// 次にカウントする予定の秒数(1000ミリ秒後)
 ClickFlag = true;
};
//マウスが放されたことを通知
btn_CountUp.onRelease = function() {
 ClickFlag = false;
};
//定期的に調べます
this.onEnterFrame = function() {
 if (ClickFlag == true) {
  // スタートボタンを押してからの経過秒数(ミリ秒)
  CurTime = getTimer() - StartTime;
  //1秒単位でカウントアップ
  // カウントする予定の秒を過ぎたらカウント
  if (YoteiTime <= CurTime) {
   // 次の予定の秒数をセット(1000ミリ秒後)
   YoteiTime = CurTime + 1000;
   i++;//カウントアップ
   lbl_NowValue.text = i;//経過時間を表示
  }
 }
};


----------------
森 巧尚
http://www.ymori.com

kotatukame
Åê¹ÆNo.9852
投稿日時: 2004-8-13 16:06
新米
居住地: 埼玉
投稿: 17
使用環境:
WindowsXP
FlashMX2004 Flash5
ありがとうございました!解決しました!
rin-ko様、森 巧尚様 丁寧に教えて下さってありがとうございました。早速使ってみたところ、いい感じな動作が確保できましたので導入させていただきます。
あとrin-ko様の言うようにsetIntervalも勉強のために作ってみました。
本当にありがとうございました。
=====================================================
var intervalID;//IntervalのID
i=1;//カウントアップ用
ClickFlag=false;//false=マウスが押されています true=マウスが放された

//マウスが押されたことを通知
btn_CountUp.onPress=function(){
ClickFlag=false;
intervalID = setInterval( CountUp, 100 );
}

//マウスが放されたことを通知
btn_CountUp.onRelease=function(){
ClickFlag=true;
clearInterval(intervalID);
}

//カウントアップする関数
function CountUp(){
if(ClickFlag == false){
i++;//カウントアップ
lbl_NowValue.text=i;//経過時間を表示
}
}
//clearIntervalを使っているのにFlagを用いているのは
//たまにIDの私がうまくいかなく、マウスを放してもカウントを
//つづけてしまうことがありましたので念のため加えています
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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