bigtoothmedia
bigtoothmedia

Reputation: 201

AS3 for loop with instance names + i

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

Answers (1)

Eduardo
Eduardo

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

Related Questions