2012-03-26 3 views
1

Ich erhalte den folgenden Fehler, wenn ich versuche, ein kurzes Stück Code auszuführen, den ich für die Verwendung einer Partikeleffektbibliothek erstellt habe.AS3 - Fehler # 1009: Zugriff auf eine Eigenschaft oder Methode eines Nullobjektverweises nicht möglich

Error # 1009: nicht eine Eigenschaft oder Methode einer null-Objektreferenz

ursprünglich zugreifen Kann ich meinen gesamten Code aus dem Haupt laufen hatte und es funktionierte gut, wenn ich es in eine setzen beschlossen " ParticleManager "Klasse I begann diesen Fehler zu bekommen.

Der Fehler selbst geschieht hier - es

stage.addEventListener(MouseEvent.CLICK, _onStageMouseDown); 

    function _onStageMouseDown(e:MouseEvent):void 
    { 
     //Draws an explosion on to the screen at the position of the mouse click. 
     var emitter:Emitter3D = new ParticleExplosion(new Vector3D(mouseX- width/2, mouseY- height/2, 0)); 
     renderer.addEmitter(emitter); 
     emitter.start(); 
     trace(e); 
     trace(renderer.mouseX) 
     trace(renderer.mouseY) 
    } 

} 

Es ist auf der ersten Zeile auftritt. Und ich habe versucht, es zu recherchieren und fand heraus, dass dies geschieht, weil die Bühne nicht auf irgendetwas eingestellt ist, aber wie komme ich da rüber? Warum hat es gut geklappt, vorher von Main aus zu laufen?

Danke!

Bearbeiten - Zusätzliche Informationen angefordert.

Die Hauptklasse

package 
{ 
    import flash.display.Sprite; 

[SWF(width='800', height='600', frameRate='60', backgroundColor='#000000')] 

    /** 
    * ... 
    * @author 
    */ 
public class Main extends Sprite 
    { 
     private var pManager:ParticleManager; 

public function Main() 
    { 
     pManager = new ParticleManager; 

    } 
    } 
} 

Die ParticleManager-Klasse, die vor nur dem Namen "Main" identisch war und von diesem ausgeführt werden würde.

package 
{ 
//Flint imports 
    import flash.events.Event; 
    import flash.events.MouseEvent; 
    import org.flintparticles.common.emitters.Emitter; 
    import org.flintparticles.common.actions.ScaleImage; 
    import org.flintparticles.common.events.EmitterEvent; 
    import org.flintparticles.common.events.ParticleEvent; 
    import org.flintparticles.threeD.emitters.Emitter3D; 
    import org.flintparticles.threeD.particles.Particle3D; 
    import org.flintparticles.threeD.renderers.BitmapRenderer; 
    import org.flintparticles.threeD.renderers.controllers.FirstPersonCamera; 
    import org.flintparticles.threeD.zones.LineZone; 
    //Flash imports 
    import flash.display.Sprite; 
    import flash.filters.BlurFilter; 
    import flash.filters.ColorMatrixFilter; 
    import flash.geom.Rectangle; 
    import flash.geom.Vector3D; 



    /** 
    * ... 
    * @author 
    */ 
    public class ParticleManager extends Sprite 
    { 
     private var orbitter:FirstPersonCamera; 
     private var renderer:BitmapRenderer; 


    public function ParticleManager() 
    { 

    //Sets up the "BitMapRenderer" a rectangle where the particle effects will be drawn on to 
     renderer = new BitmapRenderer(new Rectangle(0, 0, 800, 600), false); 
     renderer.x = 0; 
     renderer.y = 0; 
     renderer.addFilter(new BlurFilter(2, 2, 1)); 
     renderer.addFilter(new ColorMatrixFilter([ 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0.95,0 ])); 
     addChild(renderer); 


     renderer.camera.position = new Vector3D(0, 0, -400); 
     renderer.camera.target = new Vector3D(0, 0, 0); 
     renderer.camera.projectionDistance = 400; 

     //Mouse click 

     function addedToStageHandler(event:Event):void 
     { 
      stage.addEventListener(MouseEvent.CLICK, _onStageMouseDown); 
     } 


     function _onStageMouseDown(e:MouseEvent):void 
     { 
      //Draws an explosion on to the screen at the position of the mouse click. 
      var emitter:Emitter3D = new ParticleExplosion(new Vector3D(mouseX- width/2, mouseY- height/2, 0)); 
      renderer.addEmitter(emitter); 
      emitter.start(); 
      trace(e); 
      trace(renderer.mouseX) 
      trace(renderer.mouseY) 
     } 

    } 

    public function removeEmitter(ev:EmitterEvent):void 
    { 
     Emitter3D(ev.target).removeEventListener(EmitterEvent.EMITTER_EMPTY, removeEmitter); 
     renderer.removeEmitter(Emitter3D(ev.target)); 
    } 

    public function destroy():void 
    { 
     for each(var e:Emitter in renderer.emitters) 
     { 
     e.stop(); 
     } 
    } 
    } 
} 

Antwort

0

Wahrscheinlich wird es nicht zur Bühne hinzugefügt; Daher ist Stufe null, wenn der Code ausgeführt wird.

Hören Sie hinzugefügt, um die Bühne, dann diesen Code ausführen:

addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler); 

function addedToStageHandler(event:Event):void 
{ 
    stage.addEventListener(MouseEvent.CLICK, _onStageMouseDown); 
} 

Zuvor von Ihrem Main, war es wahrscheinlich schon zu Stufe hinzugefügt.

Von Haupt, sehe ich nicht, wie der Partikel-Manager zur Anzeigeliste hinzugefügt wird. Ich glaube, Sie müssen nur Ihre Partikel Manager zur hinzu:

package 
{ 
    import flash.display.Sprite; 

    [SWF(width = '800', height = '600', frameRate = '60', backgroundColor = '#000000')] 
    public class Main extends Sprite 
    { 
     private var pManager:ParticleManager; 

     public function Main() 
     { 
      pManager = new ParticleManager; 
      addChild(pManager); 
     } 
    } 
} 
+0

Mit diesem Zusatz ich nicht mehr die Fehlermeldung erhalten, Flashplayer lädt und dann sitzt nur mit einem Weißbild, wo, wie, bevor es in Ordnung funktionieren würde. – user1293902

+0

Gibt es einen Fehler? Mehr als Ihr Code-Auszug ist erforderlich, um Ihre Implementierung vollständig zu verstehen. –

+0

Es gibt keinen Fehler. Ich habe meinen ursprünglichen Beitrag aktualisiert, um die vollständige Main- und ParticalManager-Klasse anzuzeigen. Zuvor war die ParticalManager-Klasse nur die Main-Klasse. – user1293902