image_class.as , Строка 12 1026: Функции конструктора должны быть методами экземпляра

#actionscript-3

#actionscript-3

Вопрос:

классы пакетов {

 import flash.display.Sprite;
import Classes.Image_SS;
import flash.events.Event;

public class image_class extends Sprite
{
    public static var ss:Image_SS = new Image_SS("3D_solid_surface_1",2);

    static public function image_class()
    {
        addChild(ss);
        ss.alpha = 0;
        ss.x = -2000;
        var tw1:my_Tween = new my_Tween(ss,"x",0,1,"Out");
        var tw2:my_Tween = new my_Tween(ss,"alpha",1,1,"Out");
    }
    static public function remove():void
    {
        removeChild(ss);
        /*
        var tw3:my_Tween = new my_Tween(ss,"x",2000,1,"In");
        var tw4:my_Tween = new my_Tween(ss,"alpha",0,1,"In");
        tw3.addEventListener(Event.COMPLETE, onCOM);
        function onCOM(e:Event):void
        {
            ss.alpha = 0;
            ss.x = -2000;               
        }
        */
    }
}
  

}
Я не знаю, почему это не работает.
Пожалуйста, кто-нибудь, скажите мне, что здесь не так и в чем смысл этой ошибки
Пока я не забыл, я изменил функцию на общедоступную, и это ничего не изменило.

Комментарии:

1. И в моей библиотеке fla нет ничего с таким же именем. Если я удалю removeChild, все будет работать нормально. Но мне это действительно нужно.

Ответ №1:

Конструктор (image_class) не может быть статическим методом. Удалите static из его объявления

Комментарии:

1. Хорошо, теперь у меня есть еще одна ошибка: вызов возможно неопределенного метода removeChild в строке 22

2. вы вызываете removeChild из статического метода, который является методом класса в отличие от метода экземпляра. Класс не является спрайтом и не имеет метода removeChild. Если бы вы удалили ключевое слово static (таким образом, превратив этот метод в метод экземпляра), то removeChild работал бы над экземпляром класса.

3. Класс, который я пытаюсь удалить, является sprite, но мне кажется, что я не могу поместить removeChild в статическую функцию. Итак, как я могу указать классу удалять себя, когда пользователь нажимает на него.

4. это вопрос области видимости. В статических методах областью действия является сам класс, который нельзя добавить в список отображения, в нестатических методах областью действия является экземпляр класса. вы можете сохранить ссылку на экземпляр и использовать ее в статических методах, таких как instance.removeChild(), в методах экземпляра, которые были бы просто removeChid()

5. BotMaster прав насчет этого static ключевого слова. Здесь в этом нет необходимости (по крайней мере, из показанного кода). Удалите все три и просто сохраните как public function . Теперь, чтобы запустить эту функцию удаления, вы просто используете строку remove(); всякий раз, когда / где бы вам это ни понадобилось. Если это удаление на основе щелчка, то вам нужен прослушиватель событий мыши и соответствующий тип функции

Ответ №2:

Чтобы расширить мой комментарий.. (хотя и непроверенный, основанный только на опубликованном вами коде)

 //package Classes   
package 
{

import flash.display.Sprite;
import flash.events.*; //covers all events used in this code (inc mouse events) 
import Classes.Image_SS;

public class image_class extends Sprite
{
    public var ss:Image_SS = new Image_SS ("3D_solid_surface_1",2);

    public function image_class()
    {
        addChild(ss);

        //remove(); //do remove without mouse
        ss.addEventListener(MouseEvent.CLICK, remove); //for remove via mouse

        ss.alpha = 0;
        ss.x = -2000;
        var tw1:my_Tween = new my_Tween(ss,"x",0,1,"Out");
        var tw2:my_Tween = new my_Tween(ss,"alpha",1,1,"Out");
    }

    //public function remove():void //do without mouse click
    public function remove(event:MouseEvent):void //do via mouse click event
    {
        removeChild(ss);
        /*
        var tw3:my_Tween = new my_Tween(ss,"x",2000,1,"In");
        var tw4:my_Tween = new my_Tween(ss,"alpha",0,1,"In");
        tw3.addEventListener(Event.COMPLETE, onCOM);
        function onCOM(e:Event):void
        {
            ss.alpha = 0;
            ss.x = -2000;               
        }
        */
    }
}

} //close or end package