AS3 |错误1009无法修复

时间:2014-03-20 14:43:42

标签: actionscript-3


这些是我使用的变量:

var isStartDrawLineTool:Boolean=false;
var myDrawingLine:MovieClip;
var temporaryDrawingLine:Shape;

我的功能(用于画线):

drawLine();
function drawLine():void {
    if (isStartDrawLineTool == true) {
        myDrawingLine = new MovieClip();
        temporaryDrawingLine =  new Shape();
        stage.addEventListener(MouseEvent.MOUSE_DOWN, mDownLine);
        stage.addEventListener(MouseEvent.MOUSE_UP, mUpLine);
        stage.addEventListener(MouseEvent.MOUSE_MOVE, mMoveLine);
        temporaryDrawingLine.graphics.lineStyle(brushSize, brushColor, brushAlpha);
        myDrawingLine.graphics.lineStyle(brushSize, brushColor, .5);
        desktop.addChild(myDrawingLine);
        desktop.addChild(temporaryDrawingLine);
    } else {
        stage.removeEventListener(MouseEvent.MOUSE_UP, mUpLine);
        stage.removeEventListener(MouseEvent.MOUSE_DOWN, mDownLine);
        stage.removeEventListener(MouseEvent.MOUSE_MOVE, mMoveLine);
        temporaryDrawingLine.graphics.lineStyle(0, 0x00000, 0);
        myDrawingLine.graphics.lineStyle(0, 0x000000, 0);
    }
}

我得到的错误是:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at app4_fla::MainTimeline/drawLine()
    at app4_fla::MainTimeline/frame52()

我无法找到任何解决方案。我将不胜感激任何帮助。

3 个答案:

答案 0 :(得分:0)

您收到的错误意味着正在引用变量但从未实例化过。

从您的简短代码部分,我看不到desktop在任何地方实例化。

我猜这是一个某种类型的显示对象(Sprite / Movieclip),因为你正在尝试添加一个子对象。尝试在drawLine()方法中实例化此变量。

答案 1 :(得分:0)

可能是您的desktop对象为空或在drawLine()运行时,您的两个MovieClip temporaryDrawingLinemyDrawingLine可能为空。这是因为在drawLine()中如果isStartDrawLineTool设置为false(您的代码未将其设置为true),则尝试访问可能尚未创建的两个MovieClip。

相反,如果isStartDrawLineTool为真,您将实例化两个MovieClip,因此它们不会为空。

您可以从new MovieClip()中删除drawLine()实例,并将其置于上面:

myDrawingLine = new MovieClip(); //new movieclips here
temporaryDrawingLine =  new Shape();
drawLine();

function drawLine():void {
    if (isStartDrawLineTool == true) {
        stage.addEventListener(MouseEvent.MOUSE_DOWN, mDownLine);
        stage.addEventListener(MouseEvent.MOUSE_UP, mUpLine);
        stage.addEventListener(MouseEvent.MOUSE_MOVE, mMoveLine);
        .....

答案 2 :(得分:0)

Stage仅在将实例添加到舞台时才可用,因此您需要在尝试访问它之前等待它。

所以改变

drawLine();

this.addEventListener(Event.ADDED_TO_STAGE, drawLine);

另外你没有说明你在哪里定义brushSize,brushColor,brushAlpha这也可能是一个问题