Reputation: 201
I have some AS3 (I am new to this!) and the only way I could get the code to work was to be very literal and duplicate it over and over so I wondered if anyone was able to offer a more elegant solution that works?
I promise I will learn from it - I just couldn't get a for loop to work due to the dynamic movieclips not being recognised by their instance name when trying to use the integer from the for loop to build the name (if that makes sense?)...
Here is my (bulky) code so far, I want it to cater for 50 clicks not just the 6 I have here:
import flash.display.*
pic.addEventListener(MouseEvent.CLICK,addNewPoint);
var n:Number = 0;
function addNewPoint(e:MouseEvent):void {
n++;
pointNo.text = String(n);
// Create a new MovieClip
var nextPoint:MovieClip = new newPoint();
// Add the new MovieClip to the MainTimeline
// so that we can see it.
addChild(nextPoint);
nextPoint.name = "mc"+pointNo.text;
// Set the location of the new MovieClip
nextPoint.x = e.target.mouseX;
nextPoint.y = e.target.mouseY;
//Draw the line between points
if (n == 1) {
var joinPoints:MovieClip = new MovieClip();
this.addChild(joinPoints);
joinPoints.graphics.lineStyle(0.5,0xFF0000);
joinPoints.graphics.moveTo(this.getChildByName("mc1").x, this.getChildByName("mc1").y);
}else if (n == 2) {
var joinPoints:MovieClip = new MovieClip();
this.addChild(joinPoints);
joinPoints.graphics.lineStyle(0.5,0xFF0000);
joinPoints.graphics.moveTo(this.getChildByName("mc1").x, this.getChildByName("mc1").y);
joinPoints.graphics.lineTo(this.getChildByName("mc2").x, this.getChildByName("mc2").y);
}else if (n == 3) {
var joinPoints:MovieClip = new MovieClip();
this.addChild(joinPoints);
joinPoints.graphics.lineStyle(0.5,0xFF0000);
joinPoints.graphics.moveTo(this.getChildByName("mc1").x, this.getChildByName("mc1").y);
joinPoints.graphics.lineTo(this.getChildByName("mc2").x, this.getChildByName("mc2").y);
joinPoints.graphics.lineTo(this.getChildByName("mc3").x, this.getChildByName("mc3").y);
}else if (n == 4) {
var joinPoints:MovieClip = new MovieClip();
this.addChild(joinPoints);
joinPoints.graphics.lineStyle(0.5,0xFF0000);
joinPoints.graphics.moveTo(this.getChildByName("mc1").x, this.getChildByName("mc1").y);
joinPoints.graphics.lineTo(this.getChildByName("mc2").x, this.getChildByName("mc2").y);
joinPoints.graphics.lineTo(this.getChildByName("mc3").x, this.getChildByName("mc3").y);
joinPoints.graphics.lineTo(this.getChildByName("mc4").x, this.getChildByName("mc4").y);
}
else if (n == 5) {
var joinPoints:MovieClip = new MovieClip();
this.addChild(joinPoints);
joinPoints.graphics.lineStyle(0.5,0xFF0000);
joinPoints.graphics.moveTo(this.getChildByName("mc1").x, this.getChildByName("mc1").y);
joinPoints.graphics.lineTo(this.getChildByName("mc2").x, this.getChildByName("mc2").y);
joinPoints.graphics.lineTo(this.getChildByName("mc3").x, this.getChildByName("mc3").y);
joinPoints.graphics.lineTo(this.getChildByName("mc4").x, this.getChildByName("mc4").y);
joinPoints.graphics.lineTo(this.getChildByName("mc5").x, this.getChildByName("mc5").y);
}
else if (n == 6) {
var joinPoints:MovieClip = new MovieClip();
this.addChild(joinPoints);
joinPoints.graphics.lineStyle(0.5,0xFF0000);
joinPoints.graphics.moveTo(this.getChildByName("mc1").x, this.getChildByName("mc1").y);
joinPoints.graphics.lineTo(this.getChildByName("mc2").x, this.getChildByName("mc2").y);
joinPoints.graphics.lineTo(this.getChildByName("mc3").x, this.getChildByName("mc3").y);
joinPoints.graphics.lineTo(this.getChildByName("mc4").x, this.getChildByName("mc4").y);
joinPoints.graphics.lineTo(this.getChildByName("mc5").x, this.getChildByName("mc5").y);
joinPoints.graphics.lineTo(this.getChildByName("mc6").x, this.getChildByName("mc6").y);
}
}
pic.addEventListener(MouseEvent.CLICK, addNewPoint);
function fillDriveway(eventObject:MouseEvent) {
var joinPoints:MovieClip = new MovieClip();
this.addChild(joinPoints);
if (n == 3) {
var joinPoints:MovieClip = new MovieClip();
this.addChild(joinPoints);
joinPoints.graphics.lineStyle(0.5,0xFFFFFF);
joinPoints.graphics.beginFill(0xFFFFFF, 0.2);
joinPoints.graphics.moveTo(this.getChildByName("mc1").x, this.getChildByName("mc1").y);
joinPoints.graphics.lineTo(this.getChildByName("mc2").x, this.getChildByName("mc2").y);
joinPoints.graphics.lineTo(this.getChildByName("mc3").x, this.getChildByName("mc3").y);
this.getChildByName("mc1").visible=false;
this.getChildByName("mc2").visible=false;
this.getChildByName("mc3").visible=false;
}else if (n == 4) {
var joinPoints:MovieClip = new MovieClip();
this.addChild(joinPoints);
joinPoints.graphics.lineStyle(0.5,0xFFFFFF);
joinPoints.graphics.beginFill(0xFFFFFF, 0.2);
joinPoints.graphics.moveTo(this.getChildByName("mc1").x, this.getChildByName("mc1").y);
joinPoints.graphics.lineTo(this.getChildByName("mc2").x, this.getChildByName("mc2").y);
joinPoints.graphics.lineTo(this.getChildByName("mc3").x, this.getChildByName("mc3").y);
joinPoints.graphics.lineTo(this.getChildByName("mc4").x, this.getChildByName("mc4").y);
this.getChildByName("mc1").visible=false;
this.getChildByName("mc2").visible=false;
this.getChildByName("mc3").visible=false;
this.getChildByName("mc4").visible=false;
}else if (n == 5) {
var joinPoints:MovieClip = new MovieClip();
this.addChild(joinPoints);
joinPoints.graphics.lineStyle(0.5,0xFFFFFF);
joinPoints.graphics.beginFill(0xFFFFFF, 0.2);
joinPoints.graphics.moveTo(this.getChildByName("mc1").x, this.getChildByName("mc1").y);
joinPoints.graphics.lineTo(this.getChildByName("mc2").x, this.getChildByName("mc2").y);
joinPoints.graphics.lineTo(this.getChildByName("mc3").x, this.getChildByName("mc3").y);
joinPoints.graphics.lineTo(this.getChildByName("mc4").x, this.getChildByName("mc4").y);
joinPoints.graphics.lineTo(this.getChildByName("mc5").x, this.getChildByName("mc5").y);
this.getChildByName("mc1").visible=false;
this.getChildByName("mc2").visible=false;
this.getChildByName("mc3").visible=false;
this.getChildByName("mc4").visible=false;
this.getChildByName("mc5").visible=false;
}else if (n == 6) {
var joinPoints:MovieClip = new MovieClip();
this.addChild(joinPoints);
joinPoints.graphics.lineStyle(0.5,0xFFFFFF);
joinPoints.graphics.beginFill(0xFFFFFF, 0.2);
joinPoints.graphics.moveTo(this.getChildByName("mc1").x, this.getChildByName("mc1").y);
joinPoints.graphics.lineTo(this.getChildByName("mc2").x, this.getChildByName("mc2").y);
joinPoints.graphics.lineTo(this.getChildByName("mc3").x, this.getChildByName("mc3").y);
joinPoints.graphics.lineTo(this.getChildByName("mc4").x, this.getChildByName("mc4").y);
joinPoints.graphics.lineTo(this.getChildByName("mc5").x, this.getChildByName("mc5").y);
joinPoints.graphics.lineTo(this.getChildByName("mc6").x, this.getChildByName("mc6").y);
this.getChildByName("mc1").visible=false;
this.getChildByName("mc2").visible=false;
this.getChildByName("mc3").visible=false;
this.getChildByName("mc4").visible=false;
this.getChildByName("mc5").visible=false;
this.getChildByName("mc6").visible=false;
}
}
btn1.addEventListener(MouseEvent.CLICK, fillDriveway);
function undoit(eventObject:MouseEvent) {
if(n > 0) {
this.removeChild(this.getChildAt(this.numChildren -1));
this.removeChild(this.getChildAt(this.numChildren -1));
n--;
pointNo.text = String(n);
}
}
undo.addEventListener(MouseEvent.CLICK, undoit);
**EDIT --------------------------------------------
Thanks to Eduardo - finished code looks like:**
import flash.display.*
pic.addEventListener(MouseEvent.CLICK,addNewPoint);
var n:Number = 0;
function addNewPoint(e:MouseEvent):void {
n++;
pointNo.text = String(n);
// Create a new MovieClip
var nextPoint:MovieClip = new newPoint();
// Add the new MovieClip to the MainTimeline
// so that we can see it.
addChild(nextPoint);
nextPoint.name = "mc"+pointNo.text;
// Set the location of the new MovieClip
nextPoint.x = e.target.mouseX;
nextPoint.y = e.target.mouseY;
//Draw the line between points
var joinPoints:MovieClip = new MovieClip();
this.addChild(joinPoints);
joinPoints.graphics.lineStyle(0.5,0xFF0000);
joinPoints.graphics.moveTo(this.getChildByName("mc1").x, this.getChildByName("mc1").y);
for(var i:int=2; i<=n; ++i){
joinPoints.graphics.lineTo(this.getChildByName("mc"+i).x, this.getChildByName("mc"+i).y);
}
}
pic.addEventListener(MouseEvent.CLICK, addNewPoint);
function fillDriveway(eventObject:MouseEvent) {
var joinPoints:MovieClip = new MovieClip();
this.addChild(joinPoints);
joinPoints.graphics.lineStyle(0.5,0xFFFFFF);
joinPoints.graphics.beginFill(0xFFFFFF, 0.2);
joinPoints.graphics.moveTo(this.getChildByName("mc1").x, this.getChildByName("mc1").y);
for(var i:int=2; i<=n; ++i){
joinPoints.graphics.lineTo(this.getChildByName("mc"+i).x, this.getChildByName("mc"+i).y);
}
}
btn1.addEventListener(MouseEvent.CLICK, fillDriveway);
Upvotes: 1
Views: 3851
Reputation: 8412
You could simplify the ifs by doing:
var joinPoints:MovieClip = new MovieClip();
this.addChild(joinPoints);
joinPoints.graphics.lineStyle(0.5,0xFF0000);
joinPoints.graphics.moveTo(this.getChildByName("mc1").x, this.getChildByName("mc1").y);
for(var i:int=2; i<=numpoints; ++i){
joinPoints.graphics.lineTo(this.getChildByName("mc"+i).x, this.getChildByName("mc"+i).y);
}
That would take care of the first set of ifs, the second could be dealt with in a similar way
Upvotes: 4