2009-02-26 18 views
0

Kann mir jemand helfen, herauszufinden, warum ich die Fehlermeldung "Zugriff auf undefinierte Eigenschaft: removeChild (goBack)" auf dem folgenden Abschnitt erhalten habe?as3 Zugriff auf undefinierte Eigenschaft?

BTW, ist dies für Flash 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); 

} 

Antwort

1

Sie mit dem Umfang falsch sind. (überraschung :-D)

Die Variable goBack ist nur innerhalb von "nameOfFunction" definiert, wenn Sie versuchen, von einer anderen Funktion wie "anotherFunction" darauf zuzugreifen, wird es nicht mehr existieren (auch wenn es in der Anzeigeliste ist))

Es gibt verschiedene Möglichkeiten, dieses Problem zu lösen:

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

Oder der beste Weg wäre: goBack als Klasse Mitglied der Klasse hält beiden Funktionen fördern. (Oder wenn Sie keine Klassen verwenden machen Sie goBack "global".)

1

Hippo ist richtig, aber ich denke, es ist wichtig, ein wenig mehr zu erklären.

Sie haben eine lokale Variable erstellt, z. B. var someVariable: DataType; innerhalb einer Funktion. Dies bedeutet, dass diese Variable nur für Objekte im Bereich (innerhalb) der Funktion (lokal bis) verfügbar ist und nur für die Lebensdauer der Funktion gültig ist. Sobald diese Funktion ausgeführt wurde, ist der Code verschwunden, bis er wieder ausgeführt wurde. Es sieht so aus, als ob Sie wahrscheinlich direkt in der Flash-IDE auf der Zeitleiste programmieren würden. Das ist in Ordnung, aber wenn Sie eine Dokumentklasse verwenden, können Sie einfach eine Variable im Class-Bereich direkt oberhalb der Konstruktorfunktion deklarieren Setzen Sie den Wert in der gleichen Funktion, die Sie jetzt verwenden. Auf diese Weise existiert der Verweis auf die Variable nicht innerhalb der Funktion, sie wird lediglich von innen gesetzt. Dadurch kann auf diese Variable von überall in derselben Klasse zugegriffen werden, auch wenn sie auf privat gesetzt ist.

helfen Dies kann:

//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); 
} 

Scope sehr wichtig ist, und nach einer Weile zur Bewältigung sehr einfach. Bleiben Sie dabei, experimentieren Sie, lesen Sie sich über Konventionen und Standards nach, die Ihrer Entwicklung helfen und die DocumentClass lieben können, auch wenn es für manche anfangs etwas entmutigend ist, wenn Sie es erst einmal gelernt haben und sich daran gewöhnt haben Zurück zur Programmierung in der Flash-IDE auf der Timeline, wo ich glaube, dass nur Display-Objekte und Audio irgendeinen Platz haben.

Verwandte Themen