一度宣言したTimerの実行間隔をfunction内から変更する手段はないでしょうか?というものです。
かなり手続き型プログラムな理解しかないので初歩的な質問でお恥ずかしいですが、ご助言お願いいたします。
以下がソースコードになります。
//カウント変数を定義
var nekoNo:int = new int();
//Timerオブジェクトを定義
var testtime:Timer = new Timer(60);
testtime.addEventListener(TimerEvent.TIMER,ontimer);
//TimerStart時に起こるイベントを定義
function ontimer(evt:TimerEvent):void{
root.nekoNo ++;
trace(root.nekoNo);
}
//計測開始
function str_time():void{
//うまくいっていませんが、このタイミングでtesttimeの実行間隔を再設定したい。
root.testtime = new Timer(1200);
testtime.start();
}
//実行
str_time();
ビミョーに何をなさりたいのか不明なため、はずしているかもしれませんが・・
str_time()内でtesttimeに設定したTimerオブジェクトは
最初に作ったTimerオブジェクトと別モノなので、再度addEventListener()
しないとイベントハンドラ呼び出されない様に思います。
//計測開始
function str_time():void{
root.testtime = new Timer(1200);
// 新しいTimerオブジェクトにイベントリスナを設定
testtime.addEventListener(TimerEvent.TIMER,ontimer);
testtime.start();
}
Timerクラスの実行感覚はdelayプロパティで変更できます。
rootを付けてるとエラーがでませんでしたか?AS2の_rootとAS3のrootは違うので、気をつけたほうがいいかもしれません。AS3はfunction内であっても、スコープが違うという事はありません。
下記のコードではbtnインスタンスを使用しておりますので、コピペの際はお気を付けください。
//カウント変数を定義
var nekoNo:int; //intはnewしなくても大丈夫ですよ。初期値0です。
//Timerオブジェクトを定義
var testtime:Timer = new Timer(60);
testtime.addEventListener(TimerEvent.TIMER,ontimer);
trace(this.testtime.delay); //出力:60
btn.addEventListener(MouseEvent.CLICK, str_time);
//TimerStart時に起こるイベントを定義
function ontimer(evt:TimerEvent):void{
nekoNo ++;
trace(nekoNo);
}
//計測開始
function str_time(e:MouseEvent):void{
//うまくいっていませんが、このタイミングでtesttimeの実行間隔を再設定したい。
testtime.delay = 1200;
trace(testtime.delay); //出力:1200
testtime.start(); //1200msごとにontimerが呼び出されます
}
丁寧なご回答ありがとうございます!
delayプロパティの設定で再現できました!
ちなみにrootやparentといったAS3で本来使わない書き方に関しては
パブリッシュ設定のAS3設定でstrictモードのチェックを外すと使う事ができます。
まだまだAS3に慣れずどうしてもAS2っぽい書き方をしていますが、
やはり根本からちゃんと理解してドキュメントクラスの切り分けを行った方がいいなぁという気がしています。
今回は本当にありがとうございました。
ボタンでTimerオブジェクトを制御したいので、
ボタン(押した時にstr_timeが起動する)のfunction外で作ったTimerオブジェクトを
参照する方法はないものか…と悩んでいる所なのです。
どうにか方法はないものでしょうか。