Форум 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=111679)

chingachgoog 06.05.2008 16:32

Не, Vertax, у вас глобал не отлавливает
Код:

_global.z={}
z.ss={}
trace(z+" "+z.ss)
z.ss.del()
trace(z+" "+z.ss)

Цитата:

Сообщение от Vertax (Сообщение 737475)
[code]
Недостаток в коллекцию:
Код:

a = {};
a.OBJ = "Hello";

b = {};
b.parent = _root;

a.del();


Поэтому я и не люблю рекурсию :)
add:
Но кажется я победил зацикливание по ссылке на другой объект:

Код:

Object.prototype.del=function(path, firstThis){
        if(arguments.caller==null){
                var parent=_root
                var firstThis=this
        } else {
                var parent=path
                var firstThis=firstThis
        }
        for (var i in parent) {
                if (parent[i]==firstThis){
                        delete parent[i]
                        return null                       
                }
                if (typeof(parent[i])=='movieclip' || typeof(parent[i])=='object' && typeof(i)==string){
                        var rez=arguments.callee(parent[i], firstThis)
                        if (rez==null){
                                return null
                        }
                }
        }
        if(arguments.caller==null){
                for (var i in _global) {
                        if (_global[i]==firstThis){
                                delete _global[i]
                                return null                       
                        }
                        if (typeof(_global[i])=='movieclip' || typeof(_global[i])=='object'){
                                if (arguments.callee(_global[i], firstThis)==null){
                                        return null
                                }
                        }
                }
        } else {
                return false
        }
}


iNils 06.05.2008 21:03

Цитата:

Сообщение от chingachgoog (Сообщение 737458)
В этом случае можно сказать, что и мой_мувик в коде
Код:

мой_мувик.removeMovieClip()
не удаляет сам себя а лишь отдает другому объекту (команде) киллеру ссылку на себя с призывом "вот он я, убей меня быстрее!"

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

chingachgoog 07.05.2008 10:09

Я просто хотел сказать, что в этой логике получается, что ни один объект, включая мувиклип, себя напрямую не убивает - все равно идет обращение к команде-киллеру (встроенной или внешней). Но я всего-лишь хотел сделать аналог removeMovieClip(), но только для объектов.

iNils 07.05.2008 10:51

А сделать delete для мувиклипа нет желание? :D

AL.exe 07.05.2008 18:34

Цитата:

Сообщение от wvxvw (Сообщение 737405)
Объекты не должны сами себя удалять, это ошибка в дизайне...

Ну, почему... если объект мувиклип - то это, имхо, оправданно. Но мувиклип спокойно себя удаляет ( removeMovieClip() ).

Пример использования - программная анимация частиц, когда мувиклипы аттачаться на сцену и умирают, когда проигрывают свою анимацию.

crazyone 07.05.2008 19:25

Надеюсь бить меня никто не будет, если я напомню, что в ас2 объекты вручную вообще удалить нельзя?
Можно удалить все ссылки на него из-вне, тогда он убивается автоматически.

upd
В связи с этим все недовольства по поводу того, что вызывается delete %имя_объекта% — беспомощны.

В связи с этим максимум, что можно сделать — покрутить вариант, предложеный iNils на первой странице. Например так:
Код:

this.createObj=function (name) {
        this[name]=new Object();
        this[name]name=name;
        this[name]parent=this;
        this[name].del=function(){
            delete this.parent[this.name];
        }
}

this.createObj("obj1");
trace(this.obj1);
this.obj1.del();
trace(this.obj1);

И то - это только удалит ту ссылку, которая вернулась при создании объекта. Тоесть - мечты-мечты... Если можно обойтись без этого - нужно обходиться без этого. Ура!


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

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