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?
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);
}