2009-04-23 2 views
2

У меня есть пользовательский класс, определенный в ActionScript, и я хочу сделать его экземпляр в основном документе приложения Flash. Однако, после вызова конструктора с одним аргументом, Flash дает мне эту ошибку:Проблема с конструкторскими аргументами ActionScript 3

Error #1063: Argument count mismatch on coa.application::MenuItem(). Expected 1, got 0. 

Это мой класс:

public class MenuItem extends MovieClip{ 
    var button:SimpleButton; 

    public function MenuItem(buttonLoc:uint) { 

     button = new InvBtn(); 
     this.addChild(button); 
     button.x=-81; 
     button.y=buttonLoc*33; 
     button.addEventListener(MouseEvent.CLICK, mybringToFront); 
    } 
} 

И это моя попытка вызвать его конструктор:

var menu1:MovieClip = new MenuItem(3); 

Любая идея, что не так?

+0

Там нет смысла понижающего приведения MenuItem обратно в мувиклип, попробуйте: вар menu1: MenuItem = новый MenuItem (3); – Soviut

ответ

3

Извинения, я не могу комментировать, или я бы добавил это в комментарии.

Вы уверены, что:

вар menu1: MovieClip = новый MenuItem (3);

- это единственное место, где вы строите новый MenuItem? Вы случайно не имеете класс MenuItem, прикрепленный к некоторым экземплярам на сцене?

Я изменил код, чтобы это (именно так я мог запустить его), и она отлично работает:

package{ 
    import flash.display.MovieClip; 
    import flash.display.SimpleButton; 
    import flash.events.MouseEvent; 
    public class MenuItem extends MovieClip{ 

      var button:SimpleButton; 

      public function MenuItem(buttonLoc:uint) { 

        button = new SimpleButton(); 
        this.addChild(button); 
        button.x=-81; 
        button.y=buttonLoc*33; 
        button.addEventListener(MouseEvent.CLICK, mybringToFront); 
      } 

      public function mybringToFront(event:MouseEvent):void{ 
       trace('blah'); 
      } 
    } 
} 
+0

oops, да, вы правы, был экземпляр этого символа на сцене, но я этого не понимал, пока не прочитал это;) thanxalot – Dungeo

1

Как quoo сказал, скорее всего, у вас есть экземпляр объекта, класс крепится к на сцена. Для того, чтобы проверить, что это сделать:


public class MenuItem extends MovieClip{ 
     var button:SimpleButton; 

     // I changed it to int, cuz uint is extremely slow for any math 
     // other than bitwise operators, int is fast as long as no fractions 
     public function MenuItem(buttonLoc:int = -1) { 
       if (buttonLoc == -1) 
        trace("On stage instance found! Location: "+x+", "+y); 

       button = new InvBtn(); 
       this.addChild(button); 
       button.x=-81; 
       button.y=buttonLoc*33; 
       button.addEventListener(MouseEvent.CLICK, mybringToFront); 
     } 
}