2016-11-15 2 views
0

Es löst die folgende Warnung aus, funktioniert aber trotz Warnung.Zugreifen auf Stamm aus der Klasse in Action Script 3

TypeError: Fehler # 1009: Zugriff auf eine Eigenschaft oder Methode eines Nullobjektverweises nicht möglich. bei play_fla :: MainTimeline/play_fla :: frame1()

Hier ist der Arbeitscode

package { 
    import flash.events.KeyboardEvent; 
    import flash.events.MouseEvent; 
    import flash.display.SimpleButton; 
    import flash.display.*; 
    import flash.text.*; 
    import flash.events.Event; 
    import flash.display.MovieClip; 

    public class ClickButton extends SimpleButton { 
    public var fLabel:String; 
    public var sName:String; 
    public var sNumber:Number; 

    public function ClickButton() 
    { 

    }  

    public function GotoSession(sesBut:SimpleButton, frameLabel:String, sceneName:String):void {   
    sesBut.addEventListener(MouseEvent.CLICK, gotoSes);   
    function gotoSes(event:MouseEvent):void { 
    trace("sesBut = " + sesBut.name); 
    trace("frameLabel = " + frameLabel); 
    trace("sceneName = " + sceneName); 
    trace("this.stage = " + this.stage); 
    trace("this.root = " + this.root); 
    MovieClip(root).gotoAndStop(frameLabel, sceneName); 
    } 
    } 
} 
} 

Auch er verfolgt die folgenden

sesBut = home, Framelabel = Menü sceneName = Startseite, diese .stage = undefined this.root = undefined

this.stage und this.root undefiniert

Antwort

0

ich verstehe nicht wirklich, warum Sie benötigen diese Klasse für diese purpos schreiben e, aber Sie können dies trotzdem versuchen, um herauszufinden, das Problem.

Klasse Click:

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

    public class ClickButton extends SimpleButton{ 
     public var fLabel:String; 
     public var sName:String; 

     function ClickButton() { 

     } 
     public function GotoSession(sesBut:SimpleButton, frameLabel:String, sceneName:String):void { 
      fLabel = frameLabel; 
      sName = sceneName; 
      trace("sesBut = " + sesBut); 
      trace("frameLabel = " + frameLabel); 
      trace("sceneName = " + sceneName); 
      trace("this.stage = " + this.stage); 
      trace("this.root = " + this.root); 
     } 
    } 
} 

Haupttimeline Rahmen 1:

import ClickButton; 
import flash.display.SimpleButton; 

var cb_1ClickButton = new ClickButton(); 
addChild(cb_1ClickButton); 
cb_1ClickButton.GotoSession(new SimpleButton, "frameLabel", "sceneName"); 

Ausgang:

sesBut = [object SimpleButton] 
frameLabel = frameLabel 
sceneName = sceneName 
this.stage = [object Stage] 
this.root = [object MainTimeline] 

Sie können nicht die Wurzel noch Stufe zugreifen, bis das Click nicht Ereignis ist. ADDED oder Event.ADDED_TO_STAGE ist nicht wirksam. Sie können nur auf root oder stage verweisen, wenn die Instanz hinzugefügt wird.

Wenn Sie das große Bild herausfinden, können Sie dies selbst suchen und debuggen. ;)

+0

Hallo, danke für die Antwort. Können Sie mir erklären, wie Sie einen Mausklick-Handler sowie Event.ADDED_TO_STAGE hinzufügen? – Rajesh

+0

Hallo, ich habe EventListener hinzugefügt. Es funktioniert, aber löst einen Fehler aus, TypeError: Fehler # 1009: kann auf eine Eigenschaft oder Methode eines Nullobjektverweises nicht zugreifen. – Rajesh

+0

Mit freundlichen Grüßen, ich verstehe nicht die Bedeutung Ihrer Klasse ... Das ist meine Schuld/Problem. Warum möchten Sie eine Klasse erstellen, die Listener zu einigen Schaltflächen hinzufügt? Solange Ihre Klasse nicht MovieClip, Sprite oder einfache Schaltfläche, DisplayObjectContainer erweitert ... Wenn Sie es instanziieren, haben Sie keinen Verweis auf root, noch Bühne. Das scheint ein wenig knifflig zu sein ... – tatactic

Verwandte Themen