При попытке запустить небольшой фрагмент кода, который я делаю для использования библиотеки эффектов частиц, я получаю следующую ошибку.
Ошибка # 1009: невозможно получить доступ к свойству или методу пустой ссылки на объект
Изначально весь мой код работал из Main, и он работал нормально, когда я решил поместить его в класс "ParticleManager", и я начал получать эту ошибку.
Сама ошибка здесь происходит -
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)
}
}
Это происходит в первой строке. И я попытался исследовать это и обнаружил, что это происходит, потому что сцена ничего не установлена, но как мне обойти это? Почему все работало нормально с Мэйна до руки?
Спасибо!
Редактировать - запрашивается дополнительная информация.
Основной класс
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;
}
}
}
Класс ParticleManager, который раньше был идентичным, просто назывался "Main" и из него запускался.
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();
}
}
}
}