0

私はactionscriptとflashを初めて使用しますが、phpファイルからデータを取得し、30秒ごとに結果を更新するコードを作成することができました:

var timerRefreshRate:Number = 30000;
var fatherTime:Timer = new Timer(timerRefreshRate, 0);
fatherTime.addEventListener(TimerEvent.TIMER, testaa);
fatherTime.start();

function testaa(event:Event):void{

    var loader:URLLoader = new URLLoader();
    loader.dataFormat = URLLoaderDataFormat.VARIABLES;
    loader.addEventListener(Event.COMPLETE,varsLoaded);
    loader.load(new URLRequest("data.php"));

    function varsLoaded (event:Event):void {
        this.opaqueBackground = loader.data.color;
        title.text=loader.data.title;
        banner_text.text=loader.data.text;

    }
}

しかし今、私は2つの問題に直面しています:

1.) ユーザーは最初に映画がロードされるまで 30 秒待つ必要があります

2.) 背景色の設定が機能しなくなりました。

私は何を間違っていますか?

4

1 に答える 1

4

関数を 1 回呼び出して、30 秒待たずにすぐにロードできます。関数のパラメーターをデフォルトの null イベントに変更するだけです。

function testaa(event:Event = null):void{    
   //...    
}

これで、次のように関数を呼び出すことができます:

//...
fatherTime.start();
testaa();

したがって、タイマーを開始しますが、すぐに関数を 1 回実行します。

2番目の問題については、ネストされた関数を使用している可能性が最も高いためthis、クラスではなくtestaa関数を参照しています。ネストされた関数は一般的に悪い習慣であり、可能であれば避けるべきです。関数とローダー参照を外側に移動すると、機能するはずです。最終結果は次のようになります。

var loader:URLLoader;
var timerRefreshRate:Number = 30000;
var fatherTime:Timer = new Timer(timerRefreshRate, 0);
fatherTime.addEventListener(TimerEvent.TIMER, testaa);
fatherTime.start();
testaa();

function testaa(event:Event = null):void{

    loader = new URLLoader();
    loader.dataFormat = URLLoaderDataFormat.VARIABLES;
    loader.addEventListener(Event.COMPLETE,varsLoaded);
    loader.load(new URLRequest("data.php"));
}

function varsLoaded (event:Event):void {
    this.opaqueBackground = loader.data.color;
    title.text=loader.data.title;
    banner_text.text=loader.data.text;    
}
于 2013-01-16T16:48:47.653 に答える