2016-07-30 86 views
0

Ich habe eine Szene mit einem Movieclip. Dieser Movieclip verfügt über eine Schaltfläche, die die y-Position eines Symbols in der Szene steuert. Ich habe versucht, zur nächsten Szene zu gehen, wenn das Symbol bestimmte y-Werte erreicht. Ich verwendete gotoAndPlay, wenn die gewünschte y-Position erreicht wurde, die neue Szene wurde umgeschaltet, aber ein Fehler erschien am Ausgang, wie durch den Titel angezeigt. Dies ist der Code, der in dem Videoclip angezeigt:AS3 - Zugriff auf eine Eigenschaft oder Methode eines Nullobjektverweises auf gotoAndPlay nicht möglich

launch_btn.addEventListener(MouseEvent.CLICK, init_launch) 

function init_launch(evt:MouseEvent):void 
{ 
    MovieClip(root).launch_video.play(); 
    var k = setTimeout(launch, 1); 
} 

function launch():void 
{ 
    trace(MovieClip(root).rkt.y); 

    if(MovieClip(root).rkt.y != null) 
    { 
     //progressively changing the y position 
     if(MovieClip(root).rkt.y != null) 
     { 
      if(MovieClip(root).rkt.y < 600) 
      { 
       MovieClip(root).rkt.y -=0.3 
      } 
      if(MovieClip(root).rkt.y < 500) 
      { 
       ... 
      } 
      setTimeout(launch, 1); 

      if(MovieClip(root).rkt.y < -150) 
      { 
       MovieClip(root).gotoAndPlay(1, "Scene 3") 
      } 
    } 
} 

Derzeit wie diesen Code die Fehlerpunkte auf der Linie "trace (MovieClip- (root) .rkt.y);" kompilieren.

Was ich nicht bekomme ist, warum rkt plötzlich null wird, wenn ich versuche, zu einer anderen Szene zu gehen. Ich habe versucht, zu überprüfen, ob die Eigenschaft null ist, aber das hilft nicht.

Ich habe versucht, eventListener zu entfernen und Funktionen aufzurufen, die in der Action-Ebene der Szene selbst (der ursprünglichen) residierten, anstatt direkt zur Szene aus dem Movieclip zu gehen.

Alles umsonst.

Irgendwelche Ideen?

+0

Mögliches Duplikat des [as3 # 1009 Fehlercodes wurde angegeben. "Null Objektreferenz"] (http://stackoverflow.com/questions/29630538/as3-1009-error-code-provided-null-object-reference) – Brian

Antwort

-1

MovieClip (Stamm) war eigentlich die Eigenschaft, die Null wurde, wenn die y-Position erreicht wurde. Ich änderte den Zustand im Inneren Start() dass zu handhaben:

function launch():void 
{ 
    if(MovieClip(root)!= null) 
    { 
     rest of code... 
    } 
} 

Ich hoffe wirklich, würde dies anderen helfen. Ich habe hier nur eine Frage gestellt, nach vielen Recherchen online und besonders hier. Es scheint, dass dieser Fehler viele Entwickler plagt.

+0

Schön zu sehen, dass Sie den Grund für Ihr Problem selbst gefunden haben. Die Lösung ist jedoch nicht wirklich gut. Die Funktion wird immer noch aufgerufen und Ihre if-Anweisung verhindert lediglich den Fehler. Aber die Funktion sollte ** gar nicht mehr heißen. – null

+0

Hi null, ich habe den Timer anstelle von setTimeout implementiert. Es funktioniert, aber ich bekomme immer noch den gleichen Fehler, wenn ich die if-Anweisung entferne. Die Frage ist, sollte ich die if-Anweisung beibehalten? Es sei denn, ich habe den Timer nicht richtig implementiert. –

+0

Stoppen Sie den 'Timer'? Entfernen Sie die hinzugefügten Zuhörer? – null

1

Was ich nicht verstehe, ist, warum rkt plötzlich null wird, wenn ich versuche, zu einer anderen Szene zu gehen. Ich habe versucht, zu überprüfen, ob die Eigenschaft null ist, aber das hilft nicht.

Es ist das Objekt, das null ist, nicht die Eigenschaft.

habe ich versucht, eventlistener

Welche entfernt wird, dass die anhaltenden Anrufe launch durch ein Ereignis aber setTimeout ausgelöst werden, nicht nicht viel gegeben Hilfe, die Brennen halten.

Stoppen Sie mit setTimeout und verwenden Sie eine Timer. Auf diese Weise können Sie die Ereignislistener ordnungsgemäß entfernen und stoppen.