Undefined Property error, please help

I’m working on a sketchPad application in ActionScript 3.0 and have defined classes for a board and a drawing. I’m getting an undefined property error and I have no idea why I’m getting it. Any good hints would really be appreciated!

Here’s some of my code:
package {

import flash.display.Sprite;
import flash.events.*;
import flash.display.SimpleButton;
import flash.display.Graphics;
import flash.display.Shape;
import flash.filters.DropShadowFilter;

public class MyPad extends Sprite {
	
	var currentColor:Number;
	var doDraw:Boolean = false;
	var lineSize:Number = 1;
	
	public function MyPad() {
		
		trace("MyPad");
		
		var spBoard:Sprite = new Sprite();
		this.addChild(spBoard);
		spBoard.x = 75;
		spBoard.y = 75;
		
		var shDrawing:Shape = new Shape();
		spBoard.addChild(shDrawing);
		
		spBoard.graphics.lineStyle(1,0x000000);
		spBoard.graphics.beginFill(0xFFFFFF);
		spBoard.graphics.drawRect(0,0,250,250);
		spBoard.graphics.endFill();
		spBoard.filters = [new DropShadowFilter() ];
		
		//add event listeners for drawing board
		spBoard.addEventListener(MouseEvent.ROLL_OUT,boardOut);
		spBoard.addEventListener(MouseEvent.MOUSE_DOWN,boardDown);
		spBoard.addEventListener(MouseEvent.MOUSE_MOVE,boardMove);
		//event listeners for line buttons
		btnLine0.addEventListener(MouseEvent.MOUSE_DOWN,btnLine0Down);
		btnLine3.addEventListener(MouseEvent.MOUSE_DOWN,btnLine3Down);
		btnLine6.addEventListener(MouseEvent.MOUSE_DOWN,btnLine6Down);

	}
	
	function boardOut(e:MouseEvent):void {
		doDraw = false;
		//trace(doDraw);
	}
	
	function boardDown(e:MouseEvent):void {
		doDraw = true;
		
		currentColor = cpColor.selectedColor;
		trace(currentColor);
		shDrawing.graphics.lineStyle(lineSize,currentColor);
		shDrawing.graphics.moveTo(shDrawing.mouseX,shDrawing.mouseY);
					
	}
	
	function boardMove(e:MouseEvent):void {
		var curX:Number = shDrawing.mouseX;
		var curY:Number = shDrawing.mouseY;
		
		if (doDraw && checkCoords(curX,curY)) {
			shDrawing.graphics.lineTo(curX,curY);
			e.updateAfterEvent();
		}
	}
		
	
	function btnLine0Down(e:MouseEvent):void {
		lineSize = 1;
		trace(lineSize);
	}
	
	function btnLine3Down(e:MouseEvent):void {
		lineSize = 3;
		trace(lineSize);
	}
	
	function btnLine6Down(e:MouseEvent):void {
		lineSize = 6;
		trace(lineSize);
	}
}

}

And here are the errors I’m getting:

Access of undefined property shDrawing.

Help please!

thanks :slight_smile:

Your shDrawing shape is declared in the constructor, which means it’s outside the scope of your boardDown function. Declare it at the top of your class.

 package {
    
    import flash.display.Sprite;
    import flash.events.*;
    import flash.display.SimpleButton;
    import flash.display.Graphics;
    import flash.display.Shape;
    import flash.filters.DropShadowFilter;
    
    public class MyPad extends Sprite {
        
        var currentColor:Number;
        var doDraw:Boolean = false;
        var lineSize:Number = 1;
        var shDrawing:Shape; // ********* declare it here, so it's in scope of your boardDown function
        public function MyPad() {
            
            trace("MyPad");
            
            var spBoard:Sprite = new Sprite();
            this.addChild(spBoard);
            spBoard.x = 75;
            spBoard.y = 75;
            
            shDrawing = new Shape(); // ********** this line has been changed ********
            spBoard.addChild(shDrawing);
            
            spBoard.graphics.lineStyle(1,0x000000);
            spBoard.graphics.beginFill(0xFFFFFF);
            spBoard.graphics.drawRect(0,0,250,250);
            spBoard.graphics.endFill();
            spBoard.filters = [new DropShadowFilter() ];
            
            //add event listeners for drawing board
            spBoard.addEventListener(MouseEvent.ROLL_OUT,board  Out);
            spBoard.addEventListener(MouseEvent.MOUSE_DOWN,boa  rdDown);
            spBoard.addEventListener(MouseEvent.MOUSE_MOVE,boa  rdMove);
            //event listeners for line buttons
            btnLine0.addEventListener(MouseEvent.MOUSE_DOWN,bt  nLine0Down);
            btnLine3.addEventListener(MouseEvent.MOUSE_DOWN,bt  nLine3Down);
            btnLine6.addEventListener(MouseEvent.MOUSE_DOWN,bt  nLine6Down);

        }
        
        function boardOut(e:MouseEvent):void {
            doDraw = false;
            //trace(doDraw);
        }
        
        function boardDown(e:MouseEvent):void {
            doDraw = true;
            
            currentColor = cpColor.selectedColor;
            trace(currentColor);
            shDrawing.graphics.lineStyle(lineSize,currentColor  );
            shDrawing.graphics.moveTo(shDrawing.mouseX,shDrawi  ng.mouseY);
                        
        }
        
        function boardMove(e:MouseEvent):void {
            var curX:Number = shDrawing.mouseX;
            var curY:Number = shDrawing.mouseY;
            
            if (doDraw && checkCoords(curX,curY)) {
                shDrawing.graphics.lineTo(curX,curY);
                e.updateAfterEvent();
            }
        }
            
        
        function btnLine0Down(e:MouseEvent):void {
            lineSize = 1;
            trace(lineSize);
        }
        
        function btnLine3Down(e:MouseEvent):void {
            lineSize = 3;
            trace(lineSize);
        }
        
        function btnLine6Down(e:MouseEvent):void {
            lineSize = 6;
            trace(lineSize);
        }
    }
}