0

The code illustrates the problem pretty well, I've cut everything unrelated out.

Create 2-4 kinsmen when the game starts

function createInitialKinsmen()
{
    for (var k:int = 1; k < 3 + Math.round(Math.random() * 2; k++)
    {
        if (k == 1)
        {
            createKinsmen(0);
            trace ("player");
        }
        else
        {
            createKinsmen(1);
            trace ("starting kinsmen");
        }
    }
}

Kinsmen creation function

function createKinsmen(arrivalTypeVar:int)
{
    var newKinsmen = new kinsmen;
    listPanel.kinsmenDivider.addChild(newKinsmen);
    totalKinsmen++;
    totalKinsmenAlive++;
    newKinsmen.name = "kinsmen" + totalKinsmen;
    newKinsmen.arrivalType = arrivalTypeVar;
}

Kinsmen class

public class kinsmen extends MovieClip
{
    var arrivalType:int;
    function kinsmen()
    {
        trace(this.name);
        if (this.arrivalType = 0)
        {
            trace("player");
        }
        if (this.arrivalType = 1)
        {
            trace("starting kinsmen");
        }
    }
}

The output should say:

kinsmen1
player
player
kinsmen2
starting kinsmen
starting kinsmen
kinsmen3
starting kinsmen
starting kinsmen
kinsmen4
starting kinsmen
starting kinsmen

But instead says:

kinsmen1
player
player
kinsmen2
player
starting kinsmen
kinsmen3
player
starting kinsmen
kinsmen4
player
starting kinsmen

Which means that the arrivalType variable isn't being passed on. It seems to be hard-coded variables can be passed though thus at the moment I have a square with alpha 0 inside the kinsmen movieclip and it's x position determines the value of arrivalType in the constructor but this surely can't be good practice, is there a better way of doing this?

Ashton
  • 7
  • 2
  • 1
    try changing `=` to `==` in your conditions – www0z0k Feb 12 '13 at 06:57
  • @www0z0k good catch, that will be a problem... I still think he needs to pass args to his constructors. His constructor logic executes and then afterwards he sets the variables that said logic depends on. – Sunil D. Feb 12 '13 at 20:32

1 Answers1

1

I think you just want to modify your constructor function for the kinsmen class to accept a parameter for the arrivalType and the name.

What you're currently doing is constructing a new kinsmen object and afterwards setting the arrivalType and the name on that object. So when the constructor code runs, the arrivalType is the default value of an int which is 0.

Modify your constructor function like this in the kinsmen class:

function kinsmen(arrivalType:int, name:String)
{
    this.name = name;
    this.arrivalType = arrivalType;
    if (this.arrivalType == 0)
    {
        trace("player");
    }
    if (this.arrivalType == 1)
    {
        trace("starting kinsmen");
    }
}

And modify your createKinsmen() function so that it passes in a value for the arrivalType to the constructor method, instead of setting the arrivalType and name after the object is created:

function createKinsmen(arrivalTypeVar:int)
{
    totalKinsmen++;
    totalKinsmenAlive++;
    var newKinsmen = new kinsmen(arrivalTypeVar, "kinsmen" + totalKinsmen);
    listPanel.kinsmenDivider.addChild(newKinsmen);
}
Sunil D.
  • 17,983
  • 6
  • 53
  • 65
  • @Ashton glad it worked, be sure to make the change that www0z0k suggested (in the comments for your question). I'll edit my answer to include them (changing the = to ==). – Sunil D. Feb 12 '13 at 21:17