TypeError: ошибка № 2007: дочерний параметр не должен быть нулевым. в flash.display :: DisplayObjectContainer / addChild ()

Создал кнопку, теперь попытался добавить ее на экран, и я получаю эту ошибку. Код для кнопки -

private function submitButton():void {
  submit_button=new SimpleButton();
  submit_button.x=200;
  submit_button.y=200;
  submit_button.upState=buttonShape();
  submit_button.overState=buttonShape();
  submit_button.downState=buttonShape();
}

private function buttonShape() {
  var rectangle:Shape = new Shape; // initializing the variable named rectangle
  rectangle.graphics.beginFill(0x8C2B44); // choosing the colour for the fill, here it is red
  rectangle.graphics.drawRect(200, 200, 300,20); // (x spacing, y spacing, width, height)
  rectangle.graphics.endFill();
}

Я объявил его как общедоступную переменную и использую addChild(submit_button);

  • edit - весь код находится в одном файле класса. я установил кнопку отправки в начале, - private var submit_button: SimpleButton; у меня есть функция private function submitButton (): void {submit_button = new SimpleButton (); submit_button.x = 200; submit_button.y = 200;

        submit_button.upState=buttonShape();
        submit_button.overState=buttonShape();
        submit_button.downState=buttonShape();
    
    } and the drawing function seen above. and i add it to the stage in another function  - private function gameOver():void {
    
        addChild(submit_button);
        addChild(gameOver1);      basically this function is called on a hit test. and i have a text box that appears (this works) but when i add the button i get the error
    

person DIM3NSION    schedule 03.04.2011    source источник
comment
где вы используете addChild (submit_button)? Кроме того, где вы изначально объявляете для него переменную экземпляра? Я полагаю, что помимо этой функции? Например, var submit_button: SimpleButton; в верхней части конструктора класса?   -  person jpea    schedule 04.04.2011
comment
Я думаю, что buttonShape () должен вернуть прямоугольник var   -  person chchrist    schedule 04.04.2011
comment
да, это вверху файла класса - private var submit_button: SimpleButton; и что вы имеете в виду @chchrist, возвращая прямоугольник var?   -  person DIM3NSION    schedule 04.04.2011
comment
поместите прямоугольник возврата в конец buttonShape () и посмотрите, решит ли это проблему. Вы рисуете фигуру, но не возвращаете ее, чтобы присвоить переменной   -  person chchrist    schedule 04.04.2011
comment
ive добавил к оператору прямоугольник возврата. По-прежнему выдает ошибку   -  person DIM3NSION    schedule 04.04.2011


Ответы (1)


Функция buttonShape() ничего не возвращает. Ваша исходная строка var rectangle:Shape = new Shape; создает локальную переменную, которая выходит за пределы области видимости и перестает существовать в конце функции.

Поскольку buttonShape() ничего не возвращает, его фактическая сигнатура функции:

private function buttShape():void {}

с return void; в конце функции.

Это означает, что ваш код

submit_button.upState=buttonShape();

по существу компилируется в:

submit_button.upState=null;
person divillysausages    schedule 03.04.2011
comment
ive добавил к оператору прямоугольник возврата. По-прежнему выдает ошибку - person DIM3NSION; 04.04.2011
comment
Можете ли вы опубликовать код, в котором объявляете submit_button, вызывать функцию submitButton() и добавлять ее в сцену? Я только что взял код, который вы опубликовали, и он работает на моей стороне - person divillysausages; 04.04.2011
comment
вам нужно убедиться, что submitButton() действительно вызывается до gameOver(). для быстрой проверки просто позвоните submitButton() непосредственно перед строкой addChild(submit_button); - person divillysausages; 04.04.2011