0

私は AS3 初心者で、Flash でイベント ハンドラーをより快適に操作し、アプリケーションに対話機能を組み込みたいと考えています。

以下のコードでは、LineChart1 という DrawLineChart クラスのインスタンスを作成しています。ムービーをテストすると、ステージに問題なく表示されます。クリックすると、トレース コマンドを使用して、出力ウィンドウに文字列ステートメントが書き込まれます。

ただし、ステージ上の LineChart1 をクリックして削除できるようにしたいと考えています。これを行うと、エラー メッセージ 1120: Access of undefined property LineChart1 が表示されます。

インスタンス LineChart1 を参照できない理由と、クリックされたときに参照して削除できるようにするために必要なことを誰かに説明してもらえますか? また、実行時に LineChart1 をクリックすると trace ステートメントが機能するのに、removechild コマンドが機能しない理由を知りたいです。

簡単すぎる質問で申し訳ありませんが、よろしくお願いします。ほんとうにありがとう。

package{
import flash.display.*;
import flash.events.*;

public class Main extends MovieClip{ 

var recWidth:Number = 250;
var recHeight:Number = 550;
var recX:Number = 50;
var recY:Number = 50;
var recScaleY:Number = 30;

public function Main(){

var LineChart1 = new DrawLineChart(recX, recY, recWidth, recHeight, recScaleY);
LineChart1.addEventListener(MouseEvent.CLICK, onClickHandler);
addChild(LineChart1);
}

function onClickHandler(e:Event):void{
trace("hello"); // This works.  When I click on the LineChart1 MovieClip on the stage during runtime, I get "hello" as an output.
removeChild(LineChart1); // throws an error 1120: Access of undefined property LineChart1.  Why?  
}
}
}
4

3 に答える 3

0

問題は、LineChart1 をローカル変数として定義したことです。これは、関数内で宣言するため、その関数内でのみ表示されることを意味します。

クラスLineChart1のプロパティを作成すると、イベント ハンドラから参照できるようになります。または、 を使用しますe.target as DrawLineChart

于 2011-07-07T18:02:26.813 に答える
0

変数のスコープは にローカルに設定さMainれています。スコープを適切に定義するには、インスタンス変数 (クラス レベル) として宣言する必要があります。

private var _lineChart1:DrawLineChart; 

//main function
_lineChart1 = new DrawLineChart(...

//handler function
this.removeChild(_lineChart1);

AS3 のスコープの詳細については、livedocsを確認してください。

乾杯

于 2011-07-07T18:03:20.007 に答える