Расширение MovieClip - PullRequest
       25

Расширение MovieClip

0 голосов
/ 04 марта 2012

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

ArgumentError: Ошибка # 1063: несоответствие числа аргументов в mkh.custombutton :: CustomButton ().Ожидается 2, получено 0. на flash.display :: Sprite / constructChildren () на flash.display :: Sprite () на flash.display :: MovieClip ()

Я попытался отладитьмой код, но он говорит

«Невозможно отобразить исходный код в этом месте.»

Я не уверен, где проблема, но я предполагаю, что это в конструкторе:

public function CustomButton( buttonlabel:String, animationAR:Array,     active:Boolean=true, animated:Boolean = false, type:String = "free", group:int = 0 )

Буду очень признателен, если кто-нибудь мне поможет.Спасибо.

РЕДАКТИРОВАТЬ 2: Я думаю, я знаю, почему это не появляется, так что не берите в голову.

Ответы [ 3 ]

2 голосов
/ 04 марта 2012

Похоже, вы должны создавать экземпляр CustomButton без передачи ему каких-либо аргументов.

Примерно так:

var cBtn = new CustomButton();

Однако у вашего конструктора есть 2 аргумента, которые необходимо передать - buttonLabel и animationAR (остальные в порядке, потому что им назначено значение по умолчанию).

Так что вы должны делать что-то вроде этого:

var cBtn = new CustomButton('Test', someArray);
1 голос
/ 04 марта 2012

Я думаю, что знаю, в чем проблема, теперь я надеюсь, что смогу объяснить вам достаточно ясно (английский не мой родной язык). Вы случайно не сделали графический мувиклип в программе Flash и не связали его с вашим классом CustomButton? Если это так, будьте осторожны с экземплярами, которые у вас могут быть на сцене, потому что когда Flash создает объекты Sprites / Movieclips, которые находятся на сцене, он вызывает их конструктор без каких-либо параметров .

Чтобы избежать этого, либо:

  • Установите значения по умолчанию для всех параметров в вашем CustomButtonClass (EDIT: это решит вашу проблему, но не очень хорошая практика)

  • Используйте addChild , чтобы поместить экземпляры вашей кнопки на сцену (я рекомендую это)

Надеюсь, это поможет!

0 голосов
/ 04 марта 2012
public function CustomButton(
        buttonlabel:String,
        animationAR:Array,
        active:Boolean=true,
        animated:Boolean = false,
        type:String = "free",
        group:int = 0
    );

Так вы определили свой конструктор.Это означает, что первые 2 аргумента (buttonlabel abd animationAR) являются обязательными аргументами.Остальные необязательны.

Теперь, если вы попытаетесь создать такой экземпляр, как

var cb:CustomButton=new CustomButton();

Вы не передаете никаких аргументов в конструкцию, которая выдаст эту ошибку.
Обратите внимание, что этоэто то, что происходит, когда вы создаете объект непосредственно в пользовательском интерфейсе.

Способ исправить это - переопределить конструктор следующим образом:

public function CustomButton(
        buttonlabel:String="CustomButton",
        animationAR:Array=[],
        active:Boolean=true,
        animated:Boolean = false,
        type:String = "free",
        group:int = 0
    );

Это делает все аргументы необязательными и должно работать.Конечно, вам лучше всего поставить значение аргументов по умолчанию, как то, что вы знаете, будет работать.Например, в моем примере пустой массив по умолчанию для animationAR может нарушить ваш код, и в этом случае вам нужно добавить это в тело конструктора:

if(animationAR.length==0) {
    animationAR.push(new Animation());
    //YOU WILL HAVE TO CHANGE THIS LINE TO CORRESPOND TO YOUR CODE
}

ИЛИ ELSE, вы можете создать экземпляр объектакак

var cb:CustomButton=new CustomButton("My Crazy-ass CustomButton", animArray);
...