Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Удаление объекта класса (http://www.flasher.ru/forum/showthread.php?t=80487)

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();
Результат: объект не удаляется, а удаляется только мувик созданный

Кто что подскажет, ? мож я где нить ошибку допустил

Nirth 30.05.2006 13:34

либо
Код:

public function deleteObject() {
this.removeMovieClip();
delete this;
}

либо
вместо
Код:

delete mynotify;
пишем
Код:

myntify.removeMovieClip();

Juice_Green 30.05.2006 14:09

Nirth, первое "либо" удаляет только мувик, а созданный объект остается. А второй либо так и не понял, - предлагаешь удалять мувик, а объект оставлять в памяти ?

Nirth 30.05.2006 14:12

не в первом delete тоже можно снести, я его просто забыл удалить.
Код:

createEmptyMovieClip("mc",1);
mc.prop = "a";
trace(mc);
trace(mc.prop);
mc.removeMovieClip();
trace(mc);
trace(mc.prop);

как видишь ремувМувиклип сносит подчистую=)

Nirth 30.05.2006 14:14

Вообще мувиклипы в ActionScript особые объекты их нельзя создавать через конструкторы(ну можно, но эфекта ты не получишь) и нельзя удалть через delete (вернее через delete ты можешь удалить ссылку на мувик, но мувик будет жить и радоватся)

Juice_Green 30.05.2006 14:15

у тебя немножко подругому сделано. Ты мувику назначаешь свойство, а я не объекту класса, в этом же объекте еще и ссылка на мувик

Nirth 30.05.2006 14:16

я сделал пример где показываеться что сноситься и мувик и ссылки в нем
твой Класс наследник MovieClip - class WNotify extends MovieClip{
тоесть к нему применимо все что применимо к MovieClip

toFlash 30.05.2006 14:20

у меня тоже не получилось удалять таким образом как ты говоришь Nirth.
полностью удалить объект выходит тока так:
Код:

mynotify.deleteObject()
delete mynotify;


Juice_Green 30.05.2006 14:26

to Nirth:
то что наследник никто не спорит,
использовал для того - чтобы оперировать со свойствами _x, _y и др. объекта мувиклип ...
а понятие деструктора в AS случаем нет ?

Nirth 30.05.2006 14:54

2 toFlash
а ты меня правильно понял? я говорю что нужно юзать removeMovieClip()

2Juice_Green
увы нету, приходиться писать свой и в ручную вызывать.

toFlash 30.05.2006 15:40

Цитата:

Сообщение от Nirth
2 toFlash
а ты меня правильно понял? я говорю что нужно юзать removeMovieClip()

Код:

myntify.removeMovieClip();
никакого результата не дает
клип не удаляется, объект тоже, может поподробней примерчик ...

7thsky™ 30.05.2006 15:41

Не надо нам дестракторов

Обычные Объекты удаляются только 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']);



Часовой пояс GMT +4, время: 17:19.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.