2013-02-12 13 views
0

Код очень хорошо иллюстрирует проблему, я отрезал все, что не связано.Как передать переменные новым детям? [flash AS3]

Создать 2-4 сородичей, когда начинается игра

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

функция создания родича

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

родича класс

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

Вывод должен сказать:

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

Но вместо этого говорит:

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

Это означает, что arrivalType переменная не передается. Кажется, что жестко закодированные переменные могут быть переданы, хотя при этом у меня есть квадрат с альфой 0 внутри мувиклипа сородичей, и это позиция x определяет значение arrivalType в конструкторе, но это, безусловно, не может быть хорошей практикой , есть ли лучший способ сделать это?

+1

тр y меняя '=' на '==' в ваших условиях – www0z0k

+0

@ www0z0k хороший ловушка, это будет проблемой ... Я все еще думаю, что ему нужно передать аргументы своим конструкторам. Его логика конструктора выполняется, а затем он устанавливает переменные, от которых зависит логика. –

ответ

1

Я думаю, вы просто хотите изменить свою конструкторскую функцию для класса kinsmen, чтобы принять параметр для arrivalType и name.

В настоящее время вы создаете новый объект kinsmen и затем устанавливаете arrivalType и name на этот объект. Таким образом, при выполнении кода конструктора, то arrivalType значение по умолчанию из int, который равен 0.

Измените функцию конструктора, как это в kinsmen классе:

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

И измените createKinsmen() функцию так, чтобы она переходит в значение для arrivalType к методу конструктора, вместо установки arrivalType и name после того, как объект создан:

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

Отлично работает, спасибо! – Ashton

+0

@Ashton рад, что это сработало, обязательно внесите изменения, которые предложили www0z0k (в комментариях к вашему вопросу). Я отредактирую свой ответ, чтобы включить их (изменение = на ==). –