Просмотр полной версии : Удаление объекта класса
Juice_Green
30.05.2006, 12:37
Всем привет!
есть следующий класс:
class WNotify extends MovieClip{
private var w_clip:MovieClip; // ссылка на клип
// конструктор
function WNotify(PARENT:MovieClip) {
PARENT.attachMovie("WNotify", "WNotify", PARENT.getNextHighestDepth());
w_clip = PARENT["WNotify"];
_x = 400;
_y = 200;
}
public function deleteObject() {
w_clip.removeMovieClip();
delete this;
}
}
создаю объект в главном фрейме
var mynotify:WNotify = new WNotify(_root);
А теперь собственно вопрос:
надо удалить объект mynotify
1 вариант) пишу
delete mynotify;
Результат: сам объект удаляется, а мувик который аттачится в конструкторе - остается
2 вариант) пишу
mynotify.deleteObject();
Результат: объект не удаляется, а удаляется только мувик созданный
Кто что подскажет, ? мож я где нить ошибку допустил
либо
public function deleteObject() {
this.removeMovieClip();
delete this;
}
либо
вместо
delete mynotify;
пишем
myntify.removeMovieClip();
Juice_Green
30.05.2006, 14:09
Nirth, первое "либо" удаляет только мувик, а созданный объект остается. А второй либо так и не понял, - предлагаешь удалять мувик, а объект оставлять в памяти ?
не в первом delete тоже можно снести, я его просто забыл удалить.
createEmptyMovieClip("mc",1);
mc.prop = "a";
trace(mc);
trace(mc.prop);
mc.removeMovieClip();
trace(mc);
trace(mc.prop);
как видишь ремувМувиклип сносит подчистую=)
Вообще мувиклипы в ActionScript особые объекты их нельзя создавать через конструкторы(ну можно, но эфекта ты не получишь) и нельзя удалть через delete (вернее через delete ты можешь удалить ссылку на мувик, но мувик будет жить и радоватся)
Juice_Green
30.05.2006, 14:15
у тебя немножко подругому сделано. Ты мувику назначаешь свойство, а я не объекту класса, в этом же объекте еще и ссылка на мувик
я сделал пример где показываеться что сноситься и мувик и ссылки в нем
твой Класс наследник MovieClip - class WNotify extends MovieClip{
тоесть к нему применимо все что применимо к MovieClip
у меня тоже не получилось удалять таким образом как ты говоришь Nirth.
полностью удалить объект выходит тока так:
mynotify.deleteObject()
delete mynotify;
Juice_Green
30.05.2006, 14:26
to Nirth:
то что наследник никто не спорит,
использовал для того - чтобы оперировать со свойствами _x, _y и др. объекта мувиклип ...
а понятие деструктора в AS случаем нет ?
2 toFlash
а ты меня правильно понял? я говорю что нужно юзать removeMovieClip()
2Juice_Green
увы нету, приходиться писать свой и в ручную вызывать.
2 toFlash
а ты меня правильно понял? я говорю что нужно юзать removeMovieClip()
myntify.removeMovieClip();
никакого результата не дает
клип не удаляется, объект тоже, может поподробней примерчик ...
Не надо нам дестракторов
Обычные Объекты удаляются только GarbageCollector
delete удаляет только ссылку
MovieClip & TextField особые объекты
они создаются только через методы
createEmpytMovieClip, attachMovie, createTextField, removeTextField, removeMovieClip
class SomeMovie extends MovieClip {
public static var linkageID:String = 'someMovie';
public static var initialized:Boolean = Object.registerClass (linkageID, SomeMovie);
public static function create ( parent:MovieClip,
instanceName:String,
instanceDepth:Number ):SomeMovie {
return SomeMovie (parent.attachMovie (linkageID, instanceName, instanceDepth));
}
/**
* при таком создании нету надобности в
* public static var linkageID:String = 'someMovie';
* public static var initialized:Boolean = Object.registerClass (linkageID, SomeMovie);
*/
public static function create1 ( parent:MovieClip,
instanceName:String,
instanceDepth:Number,
arg:Array ):SomeMovie {
var mc:MovieClip = parent.attachMovie (linkageID, instanceName, instanceDepth);
if (mc == undefined) {
return null;
} // end if
mc.__proto__ = SomeMovie.prototype;
mc.constructor = SomeMovie;
mc.constructor.apply (mc, arg);
return SomeMovie (mc);
}
public static function create2 ( parent:MovieClip,
instanceName:String,
instanceDepth:Number,
arg:Array ):SomeMovie {
var mc:MovieClip = parent.createEmptyMovieClip (instanceName, instanceDepth);
if (mc == undefined) {
return null;
} // end if
mc.__proto__ = SomeMovie.prototype;
mc.constructor = SomeMovie;
mc.constructor.apply (mc, arg);
return SomeMovie (mc);
}
public function SomeMovie () {
trace ('isMovieClip: ' + (_totalframes >= 1));
var e:Number = arguments.length;
for (var i:Number = 0; i < e; i++) {
trace (i + ' >> ' + arguments [i]);
} // end for
}
}
var a:SomeMovie = SomeMovie.create (this, 'test1', 1);
var b:SomeMovie = SomeMovie.create1 (this, 'test2', 2);
b._x = 150;
b._y = 150;
var c:SomeMovie = SomeMovie.create2 (this, 'test3', 3, [1, 2, 'asdasdas']);
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.