setInterval[ActionScrip2.0]

時間をずらして実行させる。

setInterval

以下のような感じのソースを書いたとき、firstBtnEventBにアクセスできずにハマリました。

スコープが変わるのか!?解決策はわかりません。

※以下のソースでは実証していません。

問題のコード

  • SampleA.as
    import SampleB;
    
    public init() 
    {	
    	//1ミリ秒後にボタンにイベントを追加する
    	intervalID = setInterval(this, "firstBtnEventA", 1000);
    }
    
    public firstBtnEventA() 
    {
    	trace("成功!");
    
    	var b = new SampleB();
    	b.init();
    }
  • SampleB.as
    public init() 
    {	
    	//1ミリ秒後にボタンにイベントを追加する
    	intervalID = setInterval(this, "firstBtnEventB", 1000);
    }
    
    public firstBtnEventB() 
    {
    	trace("成功!");	//ここがtraceされない
    }

解決コード

import sampleB;
class sampleA {
	var clearId:Number;
	var b:sampleB
	function sampleA() {
		trace("sample_aコンストラクタ");
		this.init()
	}
	public function init() {
		this.clearId = setInterval(this,"firstBtnEventA", 1000);
	}
	public function firstBtnEventA() {
		trace("成功!");
		clearInterval(this.clearId)
		this.b = new sampleB();
		this.b.init();
	}
}

by ぢゃいさんっ

メモ

setIntervalは消すことを忘れず
一度だけ呼びたいときはsetTimeout()

onEnterFrame?

falsh上にmovieclip1というMovieClip?を作成しておく。

//alphaを0にしておく
_root.movieclip1.alphaTo(0, 0, 'linear', 0);

//フレームレートは24とする(1秒24フレーム)
var spd:Number = j * 24;
_root.movieclip1._x -= Math.round(spd);

var fnc:Function = firstBtnEvent;

//movieclip1を1フレームづつ動かし、秒数をカウント
_root.movieclip1.onEnterFrame = function(){

	if (0 == _root.movieclip1._x) {
		spd = 0;
		delete _root.movieclip1.onEnterFrame;
		fnc();
	} else {
		_root.movieclip1._x++;
	}
};

参考サイト

http://level0.cuppy.co.jp/2006/11/setintervalenterframe.php


Comment



Counter: 7463, today: 3, yesterday: 3

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-09-24 (火) 14:56:04 (1395d)