PDA

View Full Version : Undefined Property error, please help



shorty42
June 12th, 2008, 06:30 PM
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,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);
}
}
}

And here are the errors I'm getting:

Access of undefined property shDrawing.

Help please!

thanks :-)

DiamondDog
June 13th, 2008, 01:08 PM
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);
}
}
}