#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