0

AS3プログラムには2つの機能があり、1つは幅と高さが変更されたときに起動します。

stage.addEventListener(Event.RESIZE, resizeListener);
function resizeListener (e:Event):void { 
//some commands
}

そして2番目のものは1ミリ秒のパスを発射します:

var myTimer:Timer = new Timer(clockUpdate, 0);
myTimer.addEventListener(TimerEvent.TIMER, updateData);
myTimer.start();

function updateData(e:TimerEvent):void {
    trace("AUTOUPDATE");
    trace(e);
}

これらの関数も手動で起動する必要があります。たとえば、ユーザーがボタンを押したときなどですが、手動で呼び出されたときに送信する必要のあるパラメーターがわかりません。

resizeListener()とupdateData()だけを試しましたが、もちろんパラメーターの入力を求められません。

4

2 に答える 2

3

デフォルト値を指定することで、関数のパラメーターをオプションにすることができます。これは、上記の 2 つの関数を使用して、イベント パラメーターをオプションにした例です。

function resizeListener(e:Event = null):void { 
    //some commands
}

function updateData(e:TimerEvent = null):void {
    trace("AUTOUPDATE");
    trace(e); 
}

たとえば、呼び出しresizeListener()は関数を実行し、 の値eはデフォルトで になりますnull

于 2013-02-16T13:20:44.100 に答える
1

resizeListener(e:Event=null)walkietokyo の回答のように、 Event パラメータをオプションにすることは、完全に有効で、多くの場合便利なソリューションです。もう 1 つの方法は、イベントがトリガーされずに実行できるようにしたいことを別の関数に入れることです。この関数は、イベント ハンドラーや他の場所から呼び出すことができます。

たとえば、サイズ変更でやりたいことはレイアウトを再配置することであり、初期化時、ボタンのクリック時、または実際にはいつでも同じレイアウト設定を行いたいと仮定すると、次のようにすることができます。

stage.addEventListener(Event.RESIZE, resizeListener);
function resizeListener(e:Event):void { 
   rearrangeLayout();
}

function rearrangeLayout():void {
   // The actual rearrangement goes here, instead of in resizeListener. This can be called from anywhere. 
}

どちらの方法でそれを行うかは、おそらく好みの問題であるか、場合によって異なる可能性があります。実際には、どちらも正常に機能します。

イベント ハンドラーと別の関数で物事を分離する利点は、e:Event パラメーターが null かどうかを確認する必要がある状況が発生しないことです。つまり、イベントに依存するコードはイベント ハンドラーにあり、イベントに依存しないコードはより一般的な関数 (イベント ハンドラーではない) にあります。

したがって、より一般的で概略的なケースでは、構造は次のようになります。

addEventListener(Event.SOME_EVENT, eventListener);
function eventListener(e:Event):void { 
   // Code that needs the Event parameter goes here (if any).
   // Call other function(s), for the stuff that needs to be done when the event happens.
   otherFunction();
}

function otherFunction():void {
   // Stuff that is not dependent on the Event object goes here, an can be called from anywhere.
}
于 2013-02-16T14:12:27.613 に答える