Конструктор не работает, ошибка компиляции - PullRequest
0 голосов
/ 30 сентября 2011

Я просматривал код игрового движка и пытался воспроизвести себя, но получил ошибку компиляции.

Main.as

package {
  import flash.display.Sprite;

  public class Main extends Sprite
  {
    public function Main():void
    {
       var firstDoes:AB1 = new AB1();
       firstDoes.secondDoes._AB2();             
    }
  }
}

AB1.as

package {
  import flash.display.Sprite;

  public class AB1 extends Sprite
  {
    var secondDoes:AB2 = new AB2();

    public function _AB1():void
    {                   
    }
  }
}

AB2.as

package {
  import flash.display.Sprite;

  public class AB2 extends Sprite
  {
    public function _AB2():void
    {
        this.graphics.beginFill(0x33FF22);
        this.graphics.drawCircle(50, 50, 20);
        this.graphics.endFill();
        this.addChild(this);
    }
  }
}

Почему это не работает? Заранее спасибо.

Ответы [ 5 ]

3 голосов
/ 30 сентября 2011

Это намеренно, что у вас есть подчеркивание в конструкторе AB1 и AB2? Если нет, я бы предложил переименовать «_AB1» в «AB1», а «_AB2» в «AB2».

3 голосов
/ 30 сентября 2011

Я попытался запустить этот код.Я не получаю ошибку компиляции, но я получаю ошибку во время выполнения.Вы не можете добавить себя в детстве:

this.addChild(this); // <-------- BOOM!
1 голос
/ 30 сентября 2011

попробуйте удалить this.addChild(this); из AB2, изменив var secondDoes:AB2 = new AB2(); на public var secondDoes:AB2 = new AB2(); и добавив addChild(secondDoes); в конструктор AB1

0 голосов
/ 01 октября 2011

Class имя и constructor имя должны совпадать.

var secondDoes:AB2; Сделать это как public.

graphics является свойством DisplayObject,поэтому вы должны использовать MovieClip или Sprite или Shape для создания своего круга.

Основной класс:

package {
    import flash.display.Sprite;
    public class Main extends Sprite    {
        public function Main():void     {
            var firstDoes:AB1 = new AB1();
            addChild(firstDoes);
        }
    }
}

Класс AB1:

package {
    import flash.display.Sprite;
    public class AB1 extends Sprite {
        public var secondDoes:AB2;
        public function AB1():void{
            secondDoes = new AB2();
            addChild(secondDoes);
        }
    }
} 

Класс AB2:

package {
    import flash.display.Sprite;
    public class AB2 extends Sprite {
        public var my_mc:Sprite = new Sprite();
        public function AB2():void      {
            my_mc = new Sprite();
            my_mc.graphics.beginFill(0x33FF22);
            my_mc.graphics.drawCircle(50, 50, 20);
            my_mc.graphics.endFill();
            addChild(my_mc);
        }
    }
}
0 голосов
/ 01 октября 2011

Я думаю, что проблема в

public function Main():void

Конструктор не может иметь тип возвращаемого значения.Вы должны скорее использовать

public function Main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...