メイン コーダーズルーム【スクリプト系】 ボタンを押している間、経過時間をカウントアップ | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
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のときがマウスが押されている状態にしています。
|
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の私がうまくいかなく、マウスを放してもカウントを //つづけてしまうことがありましたので念のため加えています |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |