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

gumback 03.09.2012 21:20

Конфликт одинаковых имён классов у загружаемых роликов
 
Вложений: 1
Добрый день! Есть такой вопрос по конфликту классов с одинаковыми именами. Есть ролик-загрузчик (loader.swf). Есть ролики app1.swf и app2.swf, у которых в первом кадре создаётся объект класса Model. А именно:

Код:

import app.Model;
       
        var model:Model = new Model();
        model.init();

Код этот одинаков и в том ролике и в другом.

А вот ниже приведён код класса Model для app1.swf:

Код:

class app.Model {               
       
        function Model() {
               
        }
       
        public function init():String {               
                return "This is application 1. Initialization is done.";
        }
}

Ниже приведён код класса Model для app2.swf:

Код:

class app.Model {               
       
        function Model() {
               
        }
       
        public function init():String {               
                return "This is application 2. Initialization is done.";
        }
}

Ниже представлен код единственного кадра ролика-загрузчика:

Код:

        var loader_mc:MovieClip = _root.createEmptyMovieClip("loader_mc", _root.getNextHighestDepth());
        loader_mc._x = 100;
        loader_mc._y = 140;
       
        btn1.onRelease = function():Void {
                _root.mcLoader.unloadClip();
                _root.mcLoader.loadClip("app1/app1.swf", _root.loader_mc);       
        }
       
        btn2.onRelease = function():Void {
                _root.mcLoader.unloadClip();
                _root.mcLoader.loadClip("app2/app2.swf", _root.loader_mc);       
        }
       
        var mcLoader:MovieClipLoader = new MovieClipLoader();
        mcLoader.addListener(this);               
       
        function onLoadInit(mc:MovieClip) {
                _root.app_txt.text = mc.model.init();
        }

Загрузчик после загрузки отображает у себя в текстовом поле строку из загруженного ролика, путём вызова его функции init(). То есть для app1.swf это строка "This is application 1. Initialization is done.", а для app2.swf это "This is application 2. Initialization is done."
Так вот. Если ролик-загрузчик сначала загружает app1.swf, то в текстовом поле правильно отображается значение из его класса Model, то есть "This is application 1. Initialization is done." Теперь, если его выгрузить и загрузить app2.swf, то в текстовое поле по-прежнему подставляется значение "This is application 1. Initialization is done.", а не "This is application 2. Initialization is done." из класса Model у ролика app2.swf.
И обратная ситуация после перезапуска loader.swf: если сначала загрузить app2.swf - после его выгрузки и загрузки app1.swf, остаётся значение из класса Model ролика app2.swf.

Я знаю, что в AS3 такую проблему решали как-то через указание ApplicationDomain, а вот для AS2 вообще не знаю что делать. Причём та же штука у меня происходит и с линкованными на классы с одинаковыми именами и пакетами мувиками в библиотеке загружаемых роликов - то есть эти мувики начинают вести себя как предидущие ролики, у которых имена/пути классов одинаковые. Пока что приходится менять имена некоторых пакетов, но это, как мне кажется, не выход. Если кто-то знает, как решить эту проблему, очень прошу помочь!

udaaff 04.09.2012 09:40

Логично разные пакеты использовать.
Код AS1/AS2:

delete _global.app.Model;



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

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