These classes were written by my buddy Deamothul in response to my Graphics class.
I have put them up to show where you can go with AS2.
They are also an excellent example of a very useful implementation of inheritance.
Shapes is a standard teaching tool for inheritance in OOP. But these classes actually
have a functional usage.
I will do some more work on examples of how to use them later.
First up is the super class "Shapes". All the other classes on this page are inherited from this.
class Shapes extends MovieClip{
var mc;
var color:String;
var fill:String;
var thick:Number;
function Shapes(_mcString:String,_dep:Number){
mc = _root.createEmptyMovieClip(_mcString,_dep);
color = "0x0000ff";
fill = "0xff0000";
thick = 1;
}
public function setColor(_color:String){
color = _color;
}
public function setFill(_fill:String){
fill = _fill;
}
public function setThick(_thick:Number){
thick = _thick;
}
function drawLine(x1:Number, y1:Number, x2:Number, y2:Number) {
mc.lineStyle(thick, color);
mc.moveTo(x1, y1);
mc.lineTo(x2, y2);
}
}
Flash Tutorials in Video Format -
Watch them now at LearnFlash.com 
class Circle extends Shapes{
var radius:Number;
//CONSTRUCTOR
function Circle(_mcString:String,_dep:Number){
super(_mcString,_dep);//call the super class
trace("circle class initiated")
}
//Member makes a shape 22.5 is a circle, made via the super class :)
function filledCircle(r:Number,x:Number,y:Number,styleMaker:Number){
mc.moveTo(x+r,y);
mc.lineStyle(thick, color);
mc.beginFill(fill)
var style:Number = Math.tan(styleMaker*Math.PI/180);
for (var angle:Number=45;angle<=360;angle+=45){
var endX:Number=r * Math.cos(angle*Math.PI/180);
var endY:Number=r * Math.sin(angle*Math.PI/180);
var cX:Number= endX + r* style * Math.cos((angle-90)*Math.PI/180);
var cY:Number= endY + r* style * Math.sin((angle-90)*Math.PI/180);
mc.curveTo(cX+x,cY+y,endX+x,endY+y);
}
mc.endFill();
}
//GRADIENT SHAPE
function gradientCircle(r:Number,x:Number,y:Number,styleMaker:Number,
col1:Number,col2:Number,fa1:Number,fa2:Number,matrixX:Number,
matrixY:Number,matrixW:Number,matrixH:Number){
mc.lineStyle(thick, color);
mc.moveTo(x+r,y);
var colors:Array = [col1 ,col2];
var alphas:Array = [ fa1, fa2 ];
var ratios:Array = [ 7, 0xFF ];
var matrix:Object = { matrixType:"box", x:matrixX, y:matrixY,
w:matrixW, h:matrixH, r:(45/180)*Math.PI };
mc.beginGradientFill( "linear", colors, alphas, ratios, matrix );
var style:Number = Math.tan(styleMaker*Math.PI/180);
for (var angle:Number=45;angle<=360;angle+=45){
var endX:Number = r * Math.cos(angle*Math.PI/180);
var endY:Number = r * Math.sin(angle*Math.PI/180);
var cX:Number = endX + r* style * Math.cos((angle-90)*Math.PI/180);
var cY:Number = endY + r* style * Math.sin((angle-90)*Math.PI/180);
mc.curveTo(cX+x,cY+y,endX+x,endY+y);
}
mc.endFill()
}
}//ends class
class Hexagon extends Shapes{
function Hexagon(_mcString:String,_dep:Number){
super(_mcString,_dep);
}
// Makes a north south Hexagon
public function nonFilledHexagon_NS(hexRadius:Number){
var sideC:Number=hexRadius;
var sideA:Number = 0.5 * sideC;
var sideB:Number=Math.sin(62)* sideC;
mc.lineStyle(thick,color,100)
mc.moveTo(0,(sideA+sideC))
mc.lineTo(0,sideA);
mc.lineTo(sideB,0);
mc.lineTo((2*sideB),sideA);
mc.lineTo((2*sideB),sideA+sideC);
mc.lineTo(sideB,(2*sideC));
mc.lineTo(0,sideA+sideC);
};
// Makes a east west Hexagon
public function nonFilledHexagon_EW(hexRadius:Number){
var sideC:Number=hexRadius;
var sideA:Number = 0.5 * sideC;
var sideB:Number=Math.sin(62)* sideC;
mc.lineStyle(thick,color,100)
mc.moveTo(0,sideB)
mc.lineTo(sideA,0);
mc.lineTo((sideA+sideC),0);
mc.lineTo((2*sideC),sideB);
mc.lineTo((sideA+sideC),(2*sideB));
mc.lineTo(sideA,(2*sideB));
mc.lineTo(0,sideB);
};
//makes a nort south filled Hexagon
public function filledHexagon_NS(hexRadius:Number){
var sideC:Number=hexRadius;
var sideA:Number = 0.5 * sideC;
var sideB:Number=Math.sin(62)* sideC;
mc.lineStyle(thick,color,100)
mc.beginFill(fill)
mc.moveTo(0,(sideA+sideC))
mc.lineTo(0,sideA);
mc.lineTo(sideB,0);
mc.lineTo((2*sideB),sideA);
mc.lineTo((2*sideB),sideA+sideC);
mc.lineTo(sideB,(2*sideC));
mc.lineTo(0,sideA+sideC);
mc.endFill()
};
// Makes a east west Hexagon filled
public function filledHexagon_EW(hexRadius:Number){
var sideC:Number=hexRadius;
var sideA:Number = 0.5 * sideC;
var sideB:Number=Math.sin(62)* sideC;
mc.lineStyle(thick,color,100)
mc.beginFill(fill)
mc.moveTo(0,sideB)
mc.lineTo(sideA,0);
mc.lineTo((sideA+sideC),0);
mc.lineTo((2*sideC),sideB);
mc.lineTo((sideA+sideC),(2*sideB));
mc.lineTo(sideA,(2*sideB));
mc.lineTo(0,sideB);
mc.endFill()
};
//makes a nort south Garient filled Hexagon
public function gradientHexagon_NS(hexRadius:Number,col1:Number,
col2:Number,fa1:Number,fa2:Number,matrixX:Number,
matrixY:Number,matrixW:Number,matrixH:Number){
var sideC:Number=hexRadius;
var sideA:Number = 0.5 * sideC;
var sideB:Number=Math.sin(62)* sideC;
mc.lineStyle(thick,color,100)
mc.moveTo(0,(sideA+sideC))
var colors:Array = [col1 ,col2];
var alphas:Array = [ fa1, fa2 ];
var ratios:Array = [ 7, 0xFF ];
var matrix:Object={ matrixType:"box", x:matrixX, y:matrixY,
w:matrixW, h:matrixH, r:(45/180)*Math.PI };
mc.beginGradientFill("linear",colors,alphas,ratios,matrix );
mc.lineTo(0,sideA);
mc.lineTo(sideB,0);
mc.lineTo((2*sideB),sideA);
mc.lineTo((2*sideB),sideA+sideC);
mc.lineTo(sideB,(2*sideC));
mc.lineTo(0,sideA+sideC);
mc.endFill()
};
// hexagon_sub4.gradientHexagon_NS(60,0xaa0000,
// 0xaa0000,20,60,100,100,50,50)
// Makes a east west Hexagon gradient filled
public function gradientHexagon_EW(hexRadius:Number,
col1:Number,col2:Number,
fa1:Number,fa2:Number,
matrixX:Number,matrixY:Number,
matrixW:Number,matrixH:Number){
var sideC:Number=hexRadius;
var sideA:Number = 0.5 * sideC;
var sideB:Number=Math.sin(62)* sideC;
mc.lineStyle(thick,color,100)
mc.beginFill(fill)
mc.moveTo(0,sideB);
var colors:Array = [col1 ,col2];
var alphas:Array = [ fa1, fa2 ];
var ratios:Array = [ 7, 0xFF ];
var matrix:Object = { matrixType:"box", x:matrixX,
y:matrixY, w:matrixW, h:matrixH, r:(45/180)*Math.PI };
mc.beginGradientFill( "linear", colors, alphas, ratios, matrix );
mc.lineTo(sideA,0);
mc.lineTo((sideA+sideC),0);
mc.lineTo((2*sideC),sideB);
mc.lineTo((sideA+sideC),(2*sideB));
mc.lineTo(sideA,(2*sideB));
mc.lineTo(0,sideB);
mc.endFill()
};
// hexagon_sub4.gradientHexagon_EW(60,0xaa0000,
// 0xaa0000,20,60,100,100,50,50)
public function nonFilledHexagon_style2(hexRadius:Number, startX, startY){
var sideC:Number=hexRadius;
var sideA:Number = 0.5 * sideC;
var sideB:Number=Math.sqrt((hexRadius*hexRadius) -
(0.5*hexRadius)* (0.5*hexRadius));
mc.lineStyle(thick,color,100)
mc.moveTo(startX,startY)
mc.lineTo(startX,sideC+ startY);
mc.lineTo(sideB+startX,startY+sideA+sideC); // bottom point
mc.lineTo(2*sideB + startX , startY + sideC);
mc.lineTo(2*sideB + startX , startY);
mc.lineTo(sideB + startX, startY - sideA);
mc.lineTo(startX, startY);
};
//usage would be drawHexagon(sideLength, startX , start Y)
public function filledHexagon_style2(hexRadius:Number, startX, startY){
var sideC:Number=hexRadius;
var sideA:Number = 0.5 * sideC;
var sideB:Number=Math.sqrt((hexRadius*hexRadius) -
(0.5*hexRadius)* (0.5*hexRadius));
mc.lineStyle(thick,color,100)
mc.beginFill(fill);
mc.moveTo(startX,startY)
mc.lineTo(startX,sideC+ startY);
mc.lineTo(sideB+startX,startY+sideA+sideC); // bottom point
mc.lineTo(2*sideB + startX , startY + sideC);
mc.lineTo(2*sideB + startX , startY);
mc.lineTo(sideB + startX, startY - sideA);
mc.lineTo(startX, startY);
mc.endFill();
};
//usage would be fillHexagon(sideLength, startX , start Y)
};//class ends
class Line extends Shapes{
function Line(_mcString:String,_dep:Number){
super(_mcString,_dep);
};
//A LINE:
public function drawLine(x1:Number, y1:Number,
x2:Number, y2:Number) {
mc.lineStyle(thick, color);
mc.moveTo(x1, y1);
mc.lineTo(x2, y2);
};
//A CURVED LINE:
function drawCurve(startX:Number,
startY:Number,curveControlX:Number,
curveControlY:Number,endX:Number,endY:Number){
mc.lineStyle(thick,color);
mc.moveTo(startX,startY);
mc.curveTo(curveControlX,curveControlY,endX,endY);
};
}
class Square extends Shapes{
function Square(_mcString:String,_dep:Number){
super(_mcString,_dep);
}
//A NON FILLED RECTANGLE
public function nonFilledSquare(x1:Number, y1:Number,
width:Number, height:Number) {
mc.lineStyle(thick, color);
mc.moveTo(x1, y1);
mc.lineTo(x1+width, y1);
mc.lineTo(x1+width, y1+height);
mc.lineTo(x1, y1+height);
mc.lineTo(x1, y1);
}
//FILLED RECTANGLE
public function filledSquare(x1:Number,
y1:Number, width:Number, height:Number) {
mc.lineStyle(thick, color);
mc.moveTo(x1, y1);
mc.beginFill(fill);
mc.lineTo(x1+width, y1);
mc.lineTo(x1+width, y1+height);
mc.lineTo(x1, y1+height);
mc.lineTo(x1, y1);
mc.endFill();
}
//GRADIENT RECTANGLE
public function gradientSquare(x1:Number,
y1:Number, width:Number, height:Number,
col1:Number,col2:Number,fa1:Number,
fa2:Number,matrixX:Number,matrixY:Number,
matrixW:Number,matrixH:Number){
mc.lineStyle(thick,color);
var colors:Array = [col1 ,col2];
var alphas:Array = [ fa1, fa2 ];
var ratios:Array = [ 7, 0xFF ];
var matrix:Object = { matrixType:"box",
x:matrixX, y:matrixY,
w:matrixW, h:matrixH, r:(45/180)*Math.PI };
mc.moveTo(x1,y1);
mc.beginGradientFill( "linear", colors,
alphas, ratios, matrix );
mc.lineTo(x1+width, y1);
mc.lineTo(x1+width, y1+height);
mc.lineTo(x1, y1+height);
mc.lineTo(x1, y1);
mc.endFill();
}
}
class Triangle extends Shapes{
function Triangle(_mcString:String,_dep:Number){
super(_mcString,_dep);
}
function nonFilledTriangle(x1:Number,y1:Number,
x2:Number,y2:Number,x3:Number,y3:Number){
mc.lineStyle(thick,color);
mc.moveTo(x1,y1);
mc.lineTo(x2,y2);
mc.lineTo(x3,y3);
mc.lineTo(x1,y1);
};
//e.g nonFilledTriangle(0,0,50,-100,100,0);
function filledTriangle(x1:Number,y1:Number,
x2:Number,y2:Number,x3:Number,y3:Number){
mc.lineStyle(thick,color);
mc.moveTo(x1,y1);
mc.beginFill(fill)
mc.lineTo(x2,y2);
mc.lineTo(x3,y3);
mc.lineTo(x1,y1);
mc.endFill();
};
//e.g nonFilledTriangle(0,0,50,-100,100,0);
function gradientTriangle(x1:Number,
y1:Number,x2:Number,y2:Number,x3:Number,
y3:Number,col1:Number,col2:Number,
fa1:Number,fa2:Number,matrixX:Number,
matrixY:Number,matrixW:Number,matrixH:Number){
mc.lineStyle(thick,color);
mc.moveTo(x1,y1);
var colors:Array = [col1 ,col2];
var alphas:Array = [ fa1, fa2 ];
var ratios:Array = [ 7, 0xFF ];
var matrix:Object = { matrixType:"box", x:matrixX, y:matrixY,
w:matrixW, h:matrixH, r:(45/180)*Math.PI };
mc.beginGradientFill("linear",colors,alphas,ratios,matrix );
mc.lineTo(x2,y2);
mc.lineTo(x3,y3);
mc.lineTo(x1,y1);
mc.endFill();
};
//gradientTriangle(0,0,50,-100,100,0,
//0xaa0000,0xaa0000,20,60,100,100,50,50)
};//ends class