2014-03-20 5 views
0


Это переменные, я использую:AS3 | Ошибка 1009 не может исправить

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() 

Не удалось найти решение. Буду признателен за любую помощь.

+0

рабочего стола объект где вы создать экземпляр? –

ответ

0

этап доступен только если экземпляр добавляется к стадии, так что вы должны ждать, что, прежде чем пытаться получить доступ к нему ,

Меняем

drawLine(); 

Для

this.addEventListener(Event.ADDED_TO_STAGE, drawLine); 

Также не указывается, где вы определяете brushSize, brushColor, brushAlpha, так что может быть проблемой

0

Ошибка, которую вы получаете, означает, что переменная ссылается, но никогда не была создана.

Из вашего краткого раздела кода я не вижу desktop экземпляра в любом месте.

Я предполагаю, что это объект отображения какого-то рода (Sprite/Movieclip), когда вы пытаетесь добавить к нему ребенка. Попробуйте создать экземпляр этой переменной в вашем методе drawLine().

0

Это может быть либо ваш desktop объект является недействительным или когда drawLine() работает это возможно ваши два MovieClips temporaryDrawingLine и myDrawingLine равны нулю. Это связано с тем, что в drawLine(), если для параметра isStartDrawLineTool установлено значение false (которое ваш код не показывает, что оно установлено в true), вы пытаетесь получить доступ к обоим тем MovieClips, которые еще не были созданы.

Искробезопасно, если isStartDrawLineTool истинно, вы создадите экземпляр двух клипов, чтобы они не были пустыми.

Вы можете удалить 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); 
     ..... 
Смежные вопросы