1
当我尝试运行我为使用粒子效果库所做的一小段代码时,出现以下错误。AS3 - 错误#1009:无法访问空对象引用的属性或方法
错误#1009:
我本来我从主运行整个代码和它工作得很好,当我决定把它变成一个“无法访问空对象引用的属性或方法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)
}
}
它发生在第一行出现。我试图研究它,并发现这是因为舞台没有设置任何东西,但我该如何解决这个问题?为什么事先从Main手中运行正常?
谢谢!
编辑 - 请求的其他信息。
主类
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类,这是以前相同的只是命名为“主”,并将从运行。
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();
}
}
}
}
随着那另外我不再出现错误,则负载的FlashPlayer,然后只需用whitescreen,在那里像以前一样,将工作的罚款坐。 – user1293902 2012-03-26 20:53:09
是否有错误?不仅需要您的代码摘录才能完全理解您的实现。 – 2012-03-26 21:20:03
没有错误。我已更新我的原始帖子以显示完整的Main和ParticalManager类。在此之前,ParticalManager类仅仅是Main类。 – user1293902 2012-03-26 21:29:10