0

次の抜粋で「未定義のプロパティへのアクセス:removeChild(goBack)」というエラーメッセージが表示される理由を誰かが見つけるのを手伝ってもらえますか?

ところで、これはフラッシュCS4用です

function nameOfFunction() {

var goBack:backButton_mc = new backButton_mc();

goBack.x = 10;

goBack.y = 700;

goBack.back_text.text = myXML.*[buildingName].NAME;

goBack.name = "backBtn";

goBack.buttonMode = true;


addChild(goBack);

goBack.addEventListener(MouseEvent.CLICK, anotherFunction);

}


function anotherFunction(e:MouseEvent):void {

 removeChild(goBack);

}
4

2 に答える 2

1

Hippo は正しいですが、もう少し説明することが重要だと思います。

ローカル変数、つまり var someVariable:DataType; を作成しました。関数内。これは、その変数が関数 (ローカル) のスコープ (内部) 内のオブジェクトでのみ使用可能であり、関数の有効期間のみ持続することを意味します。その関数が実行されるとすぐに、コードは再び実行されるまでなくなります。タイムライン上のフラッシュ IDE 内で直接プログラミングしている可能性が高いようですが、これは問題ありませんが、ドキュメント クラスを使用している場合は、コンストラクター関数のすぐ上の Class スコープで変数を宣言するだけで済みます。現在使用しているのと同じ関数に値を設定します。このように、変数への参照は関数内に存在せず、内部から設定されるだけです。これにより、private に設定されていても、同じクラス内のどこからでもその変数にアクセスできます。

これは役立つかもしれません:

//Frame 1, Actions layer
//Slap goBack right onto the root / stage
var goBack:MovieClip;
/*
I noticed you had this data-typed differently,
i prefer to type to an interface, not an implementation.
Since your class is a movieclip in the library it extends
MovieClip and therefor IS A MovieClip, but ok either way.
*/

function nameOfFunction():void
{
    goBack = new backButton_mc();
    goBack.x = 10;
    goBack.y = 700;
    goBack.back_text.text = myXML.*[buildingName].NAME;
    goBack.name = "backBtn";
    goBack.buttonMode = true;
    addChild(goBack);
    goBack.addEventListener(MouseEvent.CLICK, anotherFunction);
}

function anotherFunction(e:MouseEvent):void
{
    removeChild(goBack);
}

スコープは非常に重要で、しばらくすると非常に簡単に取り組むことができます。それに固執し、実験し、開発に役立つ慣習と標準を読み、DocumentClassを愛するようになる.タイムライン上のフラッシュ IDE でのプログラミングに戻ります。ここでは、表示オブジェクトとオーディオだけがどこにでもあると思います。

于 2009-03-04T00:58:31.860 に答える
1

範囲を間違えています。(驚いた)

変数 goBack は「nameOfFunction」の内部で定義されているだけです。「anotherFunction」などの別の関数からこれにアクセスしようとすると、もう存在しません (表示リストにある場合でも)

この問題を解決するには、さまざまな方法があります。

function anotherFunction(e:MouseEvent):void {
   removeChild(e.currentTarget);
}

または、最良の方法は、両方の機能を持つクラスのクラス メンバーとして goBack をプロモートすることです。(または、クラスを使用しない場合は、goBack を「グローバル」にします。)

于 2009-02-26T15:45:34.697 に答える