AS3で質問です。

一度宣言した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();

回答の条件
  • 1人2回まで
  • 登録:2009/10/18 00:42:48
  • 終了:2009/10/18 18:31:54

回答(2件)

id:RC30-popo No.1

POPO回答回数345ベストアンサー獲得回数132009/10/18 02:49:35

ポイント28pt

ビミョーに何をなさりたいのか不明なため、はずしているかもしれませんが・・

str_time()内でtesttimeに設定したTimerオブジェクトは

最初に作ったTimerオブジェクトと別モノなので、再度addEventListener()

しないとイベントハンドラ呼び出されない様に思います。


//計測開始

function str_time():void{

root.testtime = new Timer(1200);

// 新しいTimerオブジェクトにイベントリスナを設定

testtime.addEventListener(TimerEvent.TIMER,ontimer);

testtime.start();

}

id:mizi

ボタンでTimerオブジェクトを制御したいので、

ボタン(押した時にstr_timeが起動する)のfunction外で作ったTimerオブジェクトを

参照する方法はないものか…と悩んでいる所なのです。

どうにか方法はないものでしょうか。

2009/10/18 10:01:48
id:kreuz2nd No.2

kreuz2nd回答回数9ベストアンサー獲得回数12009/10/18 13:13:29

ポイント50pt

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が呼び出されます

}

id:mizi

丁寧なご回答ありがとうございます!

delayプロパティの設定で再現できました!

ちなみにrootやparentといったAS3で本来使わない書き方に関しては

パブリッシュ設定のAS3設定でstrictモードのチェックを外すと使う事ができます。

まだまだAS3に慣れずどうしてもAS2っぽい書き方をしていますが、

やはり根本からちゃんと理解してドキュメントクラスの切り分けを行った方がいいなぁという気がしています。

今回は本当にありがとうございました。

2009/10/18 18:28:51
  • id:RC30-popo
    function外で作ったタイマーオブジェクトを制御したいのはわかりましたが、最初からnew Timer(1200)でタイマーを作らない(作れない?)理由がよくわかりません。
  • id:mizi
    説明が足りませんでしたが、テキスト入力フィールドを用意していて、
    そこの数値を参照してTimerオブジェクトのの実行間隔を変更する、
    という機能を持ったツールを作りたかったためです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません